登录
镜像操作
从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
test1:
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容器。
参见 链接 。