一:做镜像下载加速
- 默认都是使用公有仓库进行下载,在国内,我们需要进行镜像加速:
[root@docker ]# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://yu1vx79j.mirror.aliyuncs.com"]
> }
> EOF ###此处做加速,自己可以申请阿里云账号,每个人都有自己的加速地址,可以在阿里云控制台里面找到容器镜像服务,镜像加速
[root@docker etc]# systemctl daemon-reload '//重载Docker守护进程'
[root@docker etc]# systemctl restart docker '//重启Docker服务'
二:镜像常规操作
2.1:搜索镜像
- docker search 镜像名称
[root@docker etc]# docker search nginx
2.2:下载镜像
- docker pull 镜像名称
[root@docker etc]# docker pull nginx
2.3:查看已有镜像
- 查看已有镜像:docker images
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ed21b7a8aee9 8 days ago 127MB
2.4:查看镜像详细信息
- 查看镜像详细信息:docker inspect 镜像ID
[root@docker ~]# docker inspect ed21b7a8aee9
2.5:镜像存放位置
- 镜像存放位置:/var/lib/docker
- 文件信息:/var/lib/docker/image/overlay2/repositories.json
2.6:为镜像添加新的标签
- 添加标签:docker tag 仓库名:原标签 仓库名:新标签
- 标签添加完新旧标签是同时存在的
[root@docker ~]# docker tag nginx:latest nginx:web
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ed21b7a8aee9 8 days ago 127MB
nginx web ed21b7a8aee9 8 days ago 127MB
2.7:删除标签
- 删除标签:docker rmi 仓库名:标签
[root@docker ~]# docker rmi nginx:web
Untagged: nginx:web
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ed21b7a8aee9 8 days ago 127MB
2.8:删除镜像
- 删除镜像:docker rmi 镜像id,删除镜像id后此镜像所有的标签都删除
[root@docker ~]# docker rmi ed21b7a8aee9
Untagged: nginx:latest
Untagged: nginx@sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
Deleted: sha256:ed21b7a8aee9cc677df6d7f38a641fa0e3c05f65592c592c9f28c42b3dd89291
Deleted: sha256:8a305f371a6c3c445a1dfc500c1364743868a269ab8cdaf95902692e82168352
Deleted: sha256:d079ef06ec1f10a8050887365f9a940b39547ba6bcc46b16a463e740984f3223
Deleted: sha256:c3a984abe8a88059915bb6c7a1d249fd1ccc16d931334ac8816540b0eb686b45
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
2.9:导出镜像(保存镜像)到相应目录
- 导出镜像:docker save -o 相应目录 仓库名:标签
[root@docker ~]# docker save -o /opt/nginx001 nginx:latest
[root@docker ~]# ls /opt
containerd nginx001
2.10:导入镜像
- 方法1:docker load < 镜像
- 方法2:docker load --input 镜像(不建议使用)
[root@docker ~]# docker load < /opt/nginx001 '//方法一'
Loaded image: nginx:latest
[root@docker ~]# docker load --input /opt/nginx001 '//方法二'
Loaded image: nginx:latest
三:容器常规操作
3.1:创建容器
- 创建容器:docker create -it 仓库名:标签 登录环境
[root@docker ~]# docker create -it nginx:latest /bin/bash
3bf2bde0e0b9fe91a643746d4e00e37e234487b9609ea083071831776aebf50a
'//-i:让容器的标准输入保持打开'
'//-t:让docker分配一个伪终端'
3.2:查看容器状态
- 查看容器状态:docker ps -a
[root@docker ~]# docker ps -a '//状态为created'
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3bf2bde0e0b9 nginx:latest "/bin/bash" 7 seconds ago Created wizardly_swanson
'//-a:列出最近一次启动的容器'
3.3:启动容器
- 启动容器:docker start 容器id
[root@docker ~]# docker start 3bf2bde0e0b9 '//启动容器'
3bf2bde0e0b9
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3bf2bde0e0b9 nginx:latest "/bin/bash" 3 minutes ago Up 1 second 80/tcp wizardly_swanson
3.4:登录容器
- 方法一:docker exec -it 容器id 环境
- 方法二:docker run -it 容器名:标签 环境
[root@docker ~]# docker exec -it 36c6af332247 /bin/bash
[root@36c6af332247 /]# ls '//可以输入命令'
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@36c6af332247 /]# exit '//退出'
exit
[root@docker ~]# docker ps -a '//刚刚的容器依旧是up状态'
3.5:停止容器
- 停止容器:docker stop 容器id
[root@docker ~]# docker stop 3bf2bde0e0b9
3.6:启动容器并执行命令(执行完自动退出)
- 启动容器并执行命令:docker run 镜像 环境 -c 命令(如果没哟镜像会自动下载)
[root@docker ~]# docker run centos:7 /usr/bin/bash -c ls / '//启动centos:7容器并执行ls命令'
[root@docker ~]# docker ps -a '//发现此容器已经正常退出'
'//此命令执行完成后会自动退出,释放资源,状态是exited(0)'
3.7:启动容器并执行命令(持续在后台运行)
[root@docker ~]# docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"
6101ea6eedbf7a1dcc75bb9d7cc1eb94e83b343b6829b6546d6ceda318545df6
'//-c:命令'
3.8:导出容器
[root@docker ~]# docker export 6101ea6eedbf > /opt/centos7
3.9:导入容器(会生成镜像,而不会创建容器)
[root@docker ~]# cat /opt/centos7 |docker import - centos7.1
sha256:59faa021c1f1d1a9c8f1f8800a0392c7a7796968b2b05868f27e6f8bf6e63ac6
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7.1 latest 59faa021c1f1 5 seconds ago 203MB
。。。省略内容
3.10:删除容器(先停止容器在删除)
- 删除容器:docker rm 容器id
[root@docker ~]# docker rm 4aeeecce12fd
4aeeecce12fd
[root@docker ~]# docker ps -a
3.11:批量删除容器
[root@docker ~]# docker ps -a |awk '{print "docker rm "$1}'|bash '//'
- 此命令稍作改变也可以实现批量删除镜像,批量停止容器等
四:镜像制作
4.1:基于Dockerfile创建镜像
- 使用Dockerfile创建一个httpd镜像并运行
- 编写Dockerfile文件
[root@docker ~]# mkdir apache
[root@docker ~]# cd apache/
[root@docker apache]# vim Dockerfile
##基于的基础镜像
FROM centos
##维护镜像的用户信息
MAINTAINER wukong
##镜像操作指令安装Apache软件
RUN yum -y update
##安装Apache服务
RUN yum -y install httpd
##开启80端口
EXPOSE 80
##复制网址首页文件
ADD index.html /var/www/html/index.html '//此命令可以结合上图理解'
##将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
##启动容器时执行脚本
CMD ["/run.sh"]
- 编写执行脚本与首页内容
[root@docker apache]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/* '//清除缓存'
exec /usr/sbin/apachectl -D FOREGROUND '//启动apache'
[root@docker apache]# echo "this is test web" > index.html
- 生成镜像
[root@docker apache]# ls
Dockerfile index.html run.sh
[root@docker apache]# docker build -t httpd:centos . '//最后的一个"."要注意,-t:镜像的名字:标签'
'//每一个缓存层都会生成一个临时容器来执行命令,然后删除'
[root@docker apache]# docker images '//查看镜像,已经生成了两个'
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd centos d2010670b33a 19 seconds ago 434MB
centos latest 470671670cac 3 months ago 237MB
- 新镜像运行容器
[root@docker apache]# docker run -d -p 1216:80 httpd:centos '//-p 指定端口号,-P 随机端口号'
04b0f0f1bda36a4857f8d48e044cd17f442be19f4d32dee4cf3183827b451b55
[root@docker apache]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04b0f0f1bda3 httpd:centos "/run.sh" 4 seconds ago Up 3 seconds 0.0.0.0:1216->80/tcp nostalgic_greider
- 网页测试
4.2:基于已有的镜像容器创建
- 创建容器
[root@docker apache]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd centos d2010670b33a 23 minutes ago 434MB
centos latest 470671670cac 3 months ago 237MB '//使用此镜像创建容器'
[root@docker apache]# docker create -it centos /bin/bash
[root@docker apache]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
325c28cc9349 centos "/bin/bash" 42 seconds ago Created infallible_poitras
04b0f0f1bda3 httpd:centos "/run.sh" 21 minutes ago Up 21 minutes 0.0.0.0:1111->80/tcp nostalgic_greider
- 创建镜像
[root@docker apache]# docker commit -m "ceshi" -a "tang" 325c28cc9349 tang:centos '//-m:说明文字,-a:提交的作者'
sha256:a49089651887dee9c9168532466542ca7ea0c9113da078230694ac30aebe064c
[root@docker apache]# docker images '//镜像创建成功'
REPOSITORY TAG IMAGE ID CREATED SIZE
tang centos a49089651887 14 seconds ago 237MB
httpd centos d2010670b33a 30 minutes ago 434MB
centos latest 470671670cac 3 months ago 237MB
4.3:基于本地模板创建
-
下载本地模板
通过导入系统模板文件可以生成镜像,模板可以从OPENVZ开源项目下载地址为:https://wiki.openvz.org/Download/template/precreated
或者使用wget下载:wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
-
模板下载后直接导入即可
[root@docker opt]# ls
debian-7.0-x86-minimal.tar.gz ###可以看到此镜像为一个源码包
[root@docker opt]# cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new
[root@docker opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daoke new 487145d2411f 8 seconds ago 215MB
- 此种方法不常用,除非对特定的源码包进行镜像制作