docker 常用命令

# 检查Docker信息
docker info


# 搜素镜像
docker search [OPTIONS] TERM

参数说明:
Options:
  -f, --filter filter   Filter output based on conditions provided
      --help            Print usage
      --limit int       Max number of search results (default 25)
      --no-index        Don't truncate output
      --no-trunc        Don't truncate output

-f, --filter filter: 过滤输出的内容;
--limit int:指定搜索内容展示个数;
--no-index: 不截断输出内容;
--no-trunc:不截断输出内容;

[root@VM_0_15_centos ~]# docker search mysql  --no-trunc  --limit=5 
NAME                  DESCRIPTION                                                                                           STARS               OFFICIAL            AUTOMATED
mysql                 MySQL is a widely used, open-source relational database management system (RDBMS).                    9570                [OK]                
mysql/mysql-server    Optimized MySQL Server Docker images. Created, maintained and supported by the MySQL team at Oracle   702                                     [OK]
mysql/mysql-cluster   Experimental MySQL Cluster Docker images. Created by the MySQL team at Oracle                         69                                      
bitnami/mysql         Bitnami MySQL Docker Image                                                                            39                                      [OK]
circleci/mysql        MySQL is a widely used, open-source relational database management system (RDBMS).                    19                                      


# 下载镜像

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

name 镜像名称后面可以跟上镜像标签或者镜像摘要
如果没有指定镜像标签,docker默认使用:latest

拉取Ubuntu 14.04镜像
docker pull ubuntu:14.04

14.04: Pulling from library/ubuntu
5a132a7e7af1: Pull complete
fd2731e4c50c: Pull complete
28a2f68d1120: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
Status: Downloaded newer image for ubuntu:14.04

docker已经帮我们打印出了该镜像的摘要:
sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2


通过摘要方式拉取镜像:(只需要将摘要替换掉镜像标签tag即可)
docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2

 
下面的示例命令就会拉取最新的镜像文件,等同于:docker pull debian:latest
docker pull debian


下载一个 Mysql 5.7 镜像
docker pull mysql:5.7

验证一下,本地是否存在 Mysql5.7 的镜像,运行命令:
docker images


从一个镜像地址:myregistry.local:5000,拉取镜像文件:testing/test-image 
docker pull myregistry.local:5000/testing/test-image


从阿里云的Docker Hub 上pull一个MySQL的image.
docker pull registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql:5.7
 
 
# Docker 查看镜像信息 

列出本机已有的镜像:
docker images

或:
docker image ls

[root@VM_0_15_centos ~]# docker image ls 
REPOSITORY                                           TAG                 IMAGE ID            CREATED             SIZE
jumpserver/jms_all                                   latest              5f257513bfe3        5 days ago          1.48GB
registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql   5.7                 ec7e75e5260c        4 years ago         360MB

REPOSITORY: 来自于哪个仓库;
TAG: 镜像的标签信息,比如 5.7、latest 表示不同的版本信息;
IMAGE ID: 镜像的 ID, 如果您看到两个 ID 完全相同,那么实际上,它们指向的是同一个镜像,只是标签名称不同罢了;
CREATED: 镜像最后的更新时间;
SIZE: 镜像的大小


# 使用 tag 命令为镜像添加标签

为 registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql 镜像,添加新的镜像标签 andy_mysql:5.7 。
docker tag registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql:5.7 andy_mysql:5.7

[root@VM_0_15_centos ~]# docker image ls 
REPOSITORY                                           TAG                 IMAGE ID            CREATED             SIZE
jumpserver/jms_all                                   latest              5f257513bfe3        5 days ago          1.48GB
andy_mysql                                           5.7                 ec7e75e5260c        4 years ago         360MB
registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql   5.7                 ec7e75e5260c        4 years ago         360MB

可以看到,本地多了一个 andy_mysql:5.7 的镜像。而且 andy_mysql:5.7  和 registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql:5.7 的镜像 ID 是一模一样的,说明它们是同一个镜像,只是别名不同而已。
docker tag 命令功能更像是, 为指定镜像添加快捷方式一样。


# 使用 inspect 命令查看镜像详细信息

docker inspect andy_mysql:5.7 


# 导出镜像
直接导出镜像文件:
docker save -o ubuntu_demo.tar chasonlee/ubuntu_demo

-o参数后面接着输出文件名。
chasonlee/ubuntu_demo是需要导出的镜像名。
注意:这里只是导出一个静态的镜像,根据当前镜像启动的容器环境并不能直接导出,如果需要迁移当前容器的环境,还需要先使用commit命令自行制作一个镜像再导出。

# 导入镜像
导入镜像:
docker load -i ubuntu_demo.tar

导入后可以即可通过docker images查看镜像。


# 删除镜像

通过如下两个都可以删除镜像 
docker rmi [image]
或者:
docker image rm [image]

支持的子命令如下:
-f, -force: 强制删除镜像,即便有容器引用该镜像。但是,我们一般不推荐这样暴力的做法,正确的做法应该是:1.先删除引用这个镜像的容器。2.再删除这个镜像。
-no-prune: 不要删除未带标签的父镜像;

当同一个镜像拥有多个标签时,执行 docker rmi 命令,只是会删除了该镜像众多标签中指定的标签而已,并不会影响原始的那个镜像文件。


# 清理镜像

我们在使用 Docker 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像文件,可以通过以下命令进行清理:
docker image prune

它支持的子命令有:
-a, --all: 删除所有没有用的镜像,而不仅仅是临时文件;
-f, --force:强制删除镜像文件,无需弹出提示确认;


# docker run 创建容器

创建容器
-i,-interactive    交互式
-t,-tty    分配一个伪终端
-d,-detach    运行容器到后台
-e,-env    设置环境变量
-p(小写),-publish list    发布容器端口到主机
-P(大写),-publish -all    发布容器所有EXPOSE的端口到宿主机随机端口
--name string    指定容器名称
-h,-hostname    指定容器主机名
-ip string    指定容器IP,只能用于自定义网络
-network    连接容器到一个网络
-v,-volume list    绑定挂载一个卷
-restart string    容器退出时重启策略,默认no,可选值:【always|on-failure】


容器资源限制
-m,--memory    容器可以使用的最大内存量
-memory-swap    允许交换到磁盘的内存量
-memory-swappiness=<0-100>    容器使用swap分区交换的百分比(0-100,默认为-1--oom-kill-disable    禁止OOM killer
--cpus    可以使用的cpu数量
--cpuset-cpus    限制容器使用特定的cpu核心,如(0-3, 0,1--cpu-shares    cpu共享(相对权重)


docker run 创建容器使用
docker run -it创建一个容器,并进入容器
[root@VM_0_15_centos ~]# docker run -it nginx

docker run -d创建一个容器,并在后台运行
[root@VM_0_15_centos ~]# docker run -it  -d nginx

docker run -e创建一个容器,并设置环境变量
[[root@VM_0_15_centos ~]# docker run -it  -d  -e test=123456 nginx

docker run -it -d -p80:80 创建一个容器,并设置本机端口对应容器端口
[root@VM_0_15_centos ~]# docker run -it  -d  -p80:80 nginx

docker run -it -name webnginx 创建一个容器,并设置一个容器的名称
[root@VM_0_15_centos ~]# docker run -it  -d  --name webnginx  nginx

docker run -it -d -P 创建一个容器,并随机分配一个本机端口对应容器端口
[root@VM_0_15_centos ~]# docker run -it -d --name web1 -P nginx


docker 容器资源限制
内存限制-m参数,允许容器最多使用500M内存和100M的swap,并禁用OOM killer

[root@VM_0_15_centos ~]# docker run -it -d --name nginx03 --memory="500m" --memory-swap="100m" --oom-kill-disable nginx
[root@VM_0_15_centos ~]# docker stats nginx03     #查看运行状态


cpu限额 ,允许容器最多使用一个的cpu
[root@test-1 ~]# docker run -it -d --name nginx04 --cpus="1" nginx

允许容器最多使用50%的cpu
[root@test-1 ~]# docker run -it -d --name nginx05 --cpus=".5" nginx


# 查看容器的挂载目录

docker inspect container_name | grep Mounts -A 20
docker inspect container_id | grep Mounts -A 20


# 挂载目录
当我们需要访问宿主机的数据时,就需要把宿主机目录挂载到容器中,在新建容器时使用docker run -v参数即可挂载目录,例如:
docker run -dit --name my_ubuntu -v /hdd:/workspace/hdd chasonlee/ubuntu_demo:latest

-v代表挂载目录,宿主机目录和容器目录用:分开,如果需要挂载多个目录,继续多写几个-v及其对应目录即可。
/hdd是宿主机目录,必须是绝对路径。
/workspace/hdd是容器里面映射的目录,必须是绝对路径,如果目录不存在会自动创建。


# Docker 快速安装与搭建 Mysql 环境

下载 Mysql 镜像
docker pull mysql:5.7

先以简单的方式启动:

docker run -d 
--name mysql 
-p 4406:3306 
-e MYSQL_ROOT_PASSWORD=123456 
mysql:5.7

命令执行完成后,你也可以通过 docker ps 命令来确认下容器是否启动成功。若成功,我们需要将容器中的目录文件复制到宿主机中,分别包括:

mysql 配置文件;
数据存储目录,以便挂载(PS: 若不挂载到宿主机,每次启动容器数据都会丢失)
将容器中的 mysql 配置文件复制到宿主机中指定路径下,路径你可以根据需要,自行修改
docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/docker/mysql/config/mysqld.cnf

将容器中的 mysql 存储目录复制到宿主机中
docker cp mysql:/var/lib/mysql/ /usr/local/docker/mysql/data

完成这一切后,让我们将刚刚运行的容器删除掉。
docker rm -f mysql

接下来,正式运行 Mysql 容器:
docker run -idt 
--name mysql 
-p 4406:3306 
-v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf 
-v /usr/local/docker/mysql/data/mysql:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456 
mysql:5.7

其他不变,额外添加了两个挂载子命令:

-v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf: 将容器中 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件挂载到宿主机的 /usr/local/docker/mysql/config/mysqld.cnf 文件上;
-v /usr/local/docker/mysql/data:/var/lib/mysql: 将容器中 /var/lib/mysql 数据目录挂载到宿主机的 /usr/local/docker/mysql/data 目录下。


# Docker 安装搭建 Redis 环境

下载 Redis 镜像
docker pull redis:alpine

运行 Redis 容器
docker run -p 6379:6379 
--name redis  
-v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf 
-v /usr/local/docker/redis/data:/data 
-d redis:alpine redis-server /etc/redis/redis.conf --appendonly yes

连接 redis:
docker run -it redis:alpine redis-cli -h 172.17.0.1


# Docker 快速安装与搭建 MongoDB 环境

下载 MongoDB 镜像
docker pull mongo:4

运行 mongoDB 镜像 
docker run -d 
--name mongo 
-v /usr/local/docker/mongo/configdb:/data/configdb 
-v /usr/local/docker/mongo/data:/data/db 
-p 27017:27017 
mongo:4 
--auth

添加管理员账号
docker exec -it mongo mongo admin

然后,创建一个拥有最高权限 root 账号
db.createUser({ user: 'admin', pwd: '123456', roles: [ { role: "root", db: "admin" } ] });

用新创建的 root 账户连接,测试一下
docker run -it --rm --link mongo:mongo mongo mongo -u admin -p 123456 --authenticationDatabase admin mongo/admin


# 启动停止容器

下面的 my_ubuntu 可以改成 CONTAINER ID

容器停止时,可以启动容器:
docker start my_ubuntu

容器正在运行时,也可以停止容器:
docker stop my_ubuntu


# 删除容器

下面的 my_ubuntu 可以改成 CONTAINER ID

当容器已经停止时,可以直接删除容器:
docker rm my_ubuntu

当容器还在运行,可以强制删除容器:
docker rm -f my_ubuntu

如果当前有很多已经停止的容器,一个命令即可清空所有已停止容器:
docker container prune


# 基于已有的容器,创建一个新的镜像

通过如下命令来创建:
docker container commit

支持的子命令如下:
-a, --author="": 作者信息;
-c, --change=[]: 可以在提交的时候执行 Dockerfile 指令,如 CMD、ENTRYPOINT、ENV、EXPOSE、LABEL、ONBUILD、USER、VOLUME、WORIR 等;
-m, --message="": 提交信息;
-p, --pause=true: 提交时,暂停容器运行
 
[root@VM_0_15_centos ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
671a82a3b2de        mysql:5.7           "docker-entrypoint.s…"   About an hour ago   Up About an hour    33060/tcp, 0.0.0.0:4406->3306/tcp   mysql
[root@VM_0_15_centos ~]# 
[root@VM_0_15_centos ~]# docker container commit -m "add base DB data" -a "liangguojun" 671a82a3b2de  testmysql:1.0
sha256:e05f32ea8c9e974beb545c45a14ac321f584bec89725792ad16ed78c8883fd9a
[root@VM_0_15_centos ~]#
[root@VM_0_15_centos ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
testmysql            1.0                 e05f32ea8c9e        7 seconds ago       448MB
jumpserver/jms_all   latest              5f257513bfe3        5 days ago          1.48GB
mysql                5.7                 a4fdfd462add        11 days ago         448MB
nginx                latest              9beeba249f3e        2 weeks ago         127MB
 
原文地址:https://www.cnblogs.com/liang545621/p/12975594.html