登录
镜像操作
从Docker仓库拉取镜像
docker pull [镜像]:[tag] // 不使用tag则默认latest |
把镜像上传到数据仓库
把容器提交成新的镜像
docker commit [容器名] [镜像名]:[tag] |
镜像导出到文件
docker save -o [ tar 文件名] [镜像1]:[tag1] [镜像2]:[tag2] |
镜像从文件导入
给镜像打新的tag
docker tag [源镜像名]:[源tag] [目标镜像名]:[目标tag] |
删除镜像
容器操作
启动、停止、重启、删除容器
docker start [容器名] docker stop [容器名] docker restart [容器名] docker rm [容器名] |
更改容器自动启动
docker update --restart=always [容器名] // 自动启动 docker update --restart=no [容器名] // 不自动启动 |
查看容器列表
docker container ls -a // 不加-a就只能看到运行中的容器 |
查看容器信息
查看运行状态、统计信息
进入到容器的命令行(只对运行中的容器有效)
docker exec -it [容器名] [命令] // 命令一般为 bash ,但有的容器内部没有 bash 命令,就只能使用sh来代替 |
容器和宿主机之间的文件复制,对没有运行的容器也有效
docker cp [容器名]:[容器内路径] [宿主机路径] // 把文件复制到宿主机 docker cp [宿主机路径] [容器名]:[容器内路径] // 把文件从宿主机复制到容器 |
Docker run
docker run是最基本的利用镜像来运行容器的命令,有很多参数,在这里一一解释。
大多数参数在容器创建之后就没有办法修改了,少数比如restart这种参数可以通过update来修改,其他参数要删除容器,重新运行命令创建容器。
以下面这个命令举例
docker run -itd --name mongo --restart=always - v /home/docker/mongo/configdb : /data/configdb - v /home/docker/mongo/db : /data/db -p 27017:27017 mongo:4.2.3 |
最后一个参数是镜像名,意思是利用mongo:4.2.3镜像来创建容器。
-itd
经常一起使用,d的意思是在后台运行容器不占用当前命令行,it可以防止容器在运行完命令后退出。
--name
是指定容器名。
--restart
always是自动启动,no是不自动启动
-p
是端口映射,格式是[宿主机端口]:[容器端口],对宿主机相应端口的请求都会转发到容器的指定端口。
-v
是数据卷(Volume),可以有多重用法,最常用的方式是,直接让docker和宿主机共享宿主机上的文件或者文件夹,用法是[宿主机路径]:[容器内部路径],
每次启动容器的时候,都会用宿主机的路径覆盖掉容器内部路径。
一定要注意容器的数据卷定义,可以用docker inspect来查看mount里面的配置。
有的镜像定义了数据卷,但我们在run的时候又没有指定映射,Docker会为这个容器自动创建一个数据卷,可以用docker volume ls来查看。
容器提交的时候,数据卷内的内容并不会保存到镜像里去,容器删除的时候,数据卷也不会删除。用docker volume prune可以清除掉所有没有被使用的数据卷。
数据卷不能直接在文件系统里操作,因此建议还是使用文件夹映射的方式来管理持久化数据。
再看下面一个实例
docker run -d --name nurse1 -p 5571:5566 --add-host localnode:172.20.0.1 - v /home/docker/test/code : /opt/code - v /home/docker/test/log : /opt/log MyTest/springboot :1.0 |
--add-host
因为容器的网络隔离机制,在容器内部访问127.0.0.1或者localhost都是指向容器本身,而不能指向宿主机,
如果想让容器来访问宿主机,就需要使用宿主机在docker0网桥上的ip,通常为172.x.0.1,可以通过ip add命令来查看。
这里--add-host给宿主机在容器里增加了一个hostname叫localnode,这样在容器内部使用localnode就可以访问宿主机了。
还有一种方式可以通过创建连接–link的方式来关联,但不推荐,因为关联的依赖性比较强,关联的容器没有启动的话,当前容器也无法启动。
下面这个实例
docker run -p 3316:3306 --name mysql - v /home/docker/mysql/data : /var/lib/mysql - v /home/docker/mysql/log : /var/log/mysql - v /home/docker/mysql/my .cnf: /etc/mysql/conf .d /my .cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 |
-e
里面通过-e可以传入环境变量,在很多地方会使用到。
Docker-compose
一个个管理Docker命令太麻烦了,因此可以把所有的Docker命令放在一个结构化的文件里,使用docker-compose一键部署、重启和清除容器。
Docker-compose的文件有不同版本,最常用的是版本3,关于compose文件的所有格式和选项可以参考这里 链接。
docker-compose默认使用当前文件夹下面的docker-compose.yml来运行。
常用命令
docker-compose up -d // 部署所有容器 docker-compose down // 清除所有容器 |
docker-compose.yml
这里举个docker-compose.yml的例子
比如下面这些docker命令,部署了mysql和mongo,访问这两个数据库的服务test1,还有一个nginx,负责处理和转发主机请求。
docker run -p 3316:3306 --name mysql --restart always - v /home/docker/mysql/data : /var/lib/mysql - v /home/docker/mysql/log : /var/log/mysql - v /home/docker/mysql/my .cnf: /etc/mysql/conf .d /my .cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 docker run -itd --name mongo --restart always - v /home/docker/mongo/configdb : /data/configdb - v /home/docker/mongo/db : /data/db -p 27017:27017 mongo:4.2.3 docker run -d --name test1 --restart always -p 5571:5566 --add-host localnode:172.20.0.1 - v /home/docker/test1/code : /opt/code - v /home/docker/test1/log : /opt/log MyTest /springboot :1.0 docker run -d --add-host localnode:172.20.0.1 --name nginx --restart always - v /home/www : /home/www - v /home/nginx/nginx .conf: /etc/nginx/nginx .conf - v /home/nginx/logs : /var/log/nginx -p 8071:8071 -p 8072:8072 -d nginx:1.17.8-alpine |
整合成yml文件就是
version: '3' services: mysql: image: "mysql:5.7" container_name: "mysql" ports: - "3306:3306" volumes: - "/home/docker/mysql/data:/var/lib/mysql" - "/home/docker/mysql/log:/var/log/mysql" - "/home/docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf" restart: always environment: - MYSQL_ROOT_PASSWORD=123456 mongo: image: "mongo:4.2.3" container_name: "mongo" ports: - "27017:27017" volumes: - "/home/docker/mongo/configdb:/data/configdb" - "/home/docker/mongo/db:/data/db" restart: always test 1: image: "MyTest/springboot:1.0" container_name: "test1" ports: - "5571:5566" volumes: - "/home/docker/test1/code:/opt/code" - "/home/docker/test1/log:/opt/log" restart: always depends_on: - mysql - mongo extra_hosts: - "localnode:172.20.0.1" nginx: image: "nginx:1.17.8-alpine" container_name: "nginx" ports: - "8071:8071" - "8072:8072" volumes: - "/home/www:/home/www" - "/home/nginx/nginx.conf:/etc/nginx/nginx.conf" - "/home/nginx/logs:/var/log/nginx" restart: always depends_on: - test1 extra_hosts: - "localnode:172.20.0.1" |
Portainer
在Docker中部署portainer可视化工具,可以查看和管理本地和远程的Docker容器。
参见 链接 。