一、镜像
以nginx为例
- 搜索镜像:
docker search 镜像名称
docker search nginx
- 下载镜像:
docker pull 镜像名称
docker pull nginx
Docker的镜像下载一般都是使用公有仓库进行下载,也就是在Docker官网下载,因此我们需要进行镜像加速,详情可参考Docker——相关概念及安装方法
镜像下载完存放在:/var/lib/docker,下载的文件信息:/var/lib/docker/image/overlay2/repositories.json
- 查看已有镜像:
docker images
docker images
- 查看镜像详细信息:
docker inspect 镜像ID
docker inspect f6d0b4767a6c
- 添加新标签:
docker tag 镜像名:标签 镜像名:新标签
相当于复制了该镜像并且换了个别名
docker tag nginx:latest nginx:web
- 删除镜像:
docker rmi 镜像ID
注:一般情况下都是通过指定镜像ID删除镜像,但如果此时镜像有其他标签,就会删除失败;虽然可以指定镜像名来删除,但删除的只是原先下载的镜像,后面添加的别名镜像还在
想要彻底删除这个镜像只能删除别名镜像再删除原镜像
- 导出(保存)镜像:
docker save -o 相应目录 仓库名:标签
docker save -o /opt/nginx nginx:latest
- 导入镜像:
方法1:docker load < 镜像
方法2:docker load --input 镜像
二、容器
- 创建容器:
docker create -it 仓库名:标签 登录环境
docker create -it nginx:latest /bin/bash
#-i:让容器的标准输入保持打开
#-t:让docker分配一个伪终端
- 查看容器状态:
docker ps -a
- 启动容器:
docker start 容器id
docker start 62aa15300391
- 登陆正在运行的容器
方法一:docker exec -it 容器id 环境
方法二:docker run -it 容器名:标签 环境
- 停止容器:
docker stop 容器id
docker stop 62aa15300391
注:容器在停止状态下是无法登录
- 启动容器并执行命令(执行完自动退出):
docker run 镜像 环境 -c 命令
(如果没有镜像会自动下载)
docker run centos:7 /bin/bash -c ls /
docker ps -a
docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"
- 启动容器并执行命令(持续在后台运行)
docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"
注:要先停止这个容器才可以删除
- 容器导出
docker export a1ad151da20e > /opt/centos7
- 删除所有未在运行的容器
docker container prune
- 容器导入(会生成镜像,而不会创建容器)
cat /opt/centos7 | docker import - centos7.1
- 删除所有未在运行的容器
docker container prune
docker ps -a | awk '{print "docker rm "$1}'| bash
三、仓库
- 私有仓库建立
docker pull registry
vim /etc/docker/daemon.json
{
"insecure-registries":["192.168.153.50:5000"], #添加此行
... ...
}
systemctl restart docker
docker create -it registry /bin/bash
docker ps -a
docker start 6f7497fcc8c2
#宿主机的/data/registry 自动创建并挂载到容器中的/tmp/registry
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
#更改标记为192.168.153.50:5000/nginx
docker tag nginx:latest 192.168.153.50:5000/nginx
#上传镜像
docker push 192.168.153.50:5000/nginx
#获取私有仓库列表
curl -XGET http://192.168.153.50:5000/v2/_catalog
#测试私有仓库下载
docker pull 192.168.153.40:5000/nginx
Docker 数据卷
docker pull centos:7
#宿主机目录/opt/share挂载容器中的/test
docker run -v /opt/share:/test --name web01 -it centos /bin/bash
cd /test/
touch abc.txt
exit
ls /opt/share/ #返回宿主机查看
abc.txt
此方法可以在不进入容器的情况下进行相关操作
数据卷容器
#数据卷容器
docker run --name web02 -v /test01 -v /test02 -it centos:7 /bin/bash
#新容器挂载数据卷容器web02
docker run -it --volumes-from web02 --name web01 centos:7 /bin/bash
数据卷与数据卷容器的区别在于:数据卷是挂载在宿主机上的,宿主机挂载目录上相关操作会同步到容器中;而数据卷容器是通过–volumes-from实现容器与容器之间的挂载
端口映射
docker run -d -P nginx #-P随机端口
docker run -d -p 42515:80 nginx #-p指定端口)
docker ps -a
docker run -itd -P --name web11 centos:7 /bin/bash #创建并运行容器取名web11,端口号自动映射
docker run -itd -P --name web22 --link web11:web00 centos:7 /bin/bash #创建并运行容器取名web22,链接到web11和其通信进web22容器 ping web11
##--link name:alias --link容器名:别名
因为web11的地址映射到了web22的/etc/hosts里,所以这里才可以ping通