文章目录
前言
一、什么是Docker镜像?
镜像是构建 Docker 的基石。用户基于镜像来运行自己的容器。镜像也是 Docker 生命周 期中的“构建”部分。也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。
一 . 安装docker 服务
1.1 首先,下载环境软件
[root@server 11 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
1.2 设置阿里云YUM软件源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror, langpacks
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
1.3 开启路由功能,优化速度
[root@server 11 ~]# vim /etc/sysctl/conf
net.ipv4.ip_forward=1
优化
[root@server 11 ~]# sysctl -p
net.ipv4.ip_forward = 1
1.4 加速优化 阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://*******.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
1.5 下载安装docker
[root@server 11 ~]# yum install -y docker-ce
sudo systemctl restart docker
二. dock 镜像常用操作
2.1查看版本docker
[root@docker2 apache]# docker --version
Docker version 19.03.13, build 4484c46d9d
2.2 镜像下载及删除,及查看列表信息,设置别名
2.2.1 例如,查找nginx
STARS 数 越高越好哈
[root@server 11 ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 13745 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con…1874 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of…787 [OK]
2.2.2 下载nginx 镜像:
[root@server 11 ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
d121f8d1c412: Pull complete
ebd81fc8c071: Pull complete
655316c160af: Pull complete
d15953c0e0f8: Pull complete
2ee525c5c3cc: Pull complete
Digest: sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@server 11 ~]#
2.2.3 查看下载镜像文件的列表及信息
[root@server 11 overlay2]# cd /var/lib/docker/image/overlay2
[root@server 11 overlay2]# ls
distribution imagedb layerdb repositories.json
查看下载镜像列表
[root@server 11 overlay2]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 7e4d58f0e5f3 6 days ago 133MB
[root@server 11 overlay2]#
获取镜像详细信息
[root@server 11 overlay2]# docker inspect 7e4d58f0e5f3
[
{
"Id": "sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d",
"RepoTags": [
"nginx:latest"
],
…
2.2.4 对镜像添加新标签,类似于硬连接,别名
(删除一个,不影响源文件)
[root@server 11 overlay2]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 7e4d58f0e5f3 6 days ago 133MB
[root@server 11 overlay2]# docker tag nginx:latest nginx:web
[root@server 11 overlay2]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 7e4d58f0e5f3 6 days ago 133MB
nginx web 7e4d58f0e5f3 6 days ago 133MB
2.2.5 删除镜像文件操作方法
docker rmi 文件名:标签 或 ID 号
[root@server 11 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 7e4d58f0e5f3 7 days ago 133MB
nginx web 7e4d58f0e5f3 7 days ago 133MB
若有多个 tag 名,必须删除的只剩下一个,才好删除,或者没有容器使用它
[root@SERVER 10 opt]# docker rmi 7e4d58f0e5f3
Untagged: nginx:latest
Untagged: nginx@sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Deleted: sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d
Deleted: sha256:eedfd37abc0b05520a719addf6675b372687fe9a2ed1746fa988335720d4376c
Deleted: sha256:4f052ddd517f6dc5b74d2f7d881838b8ec6a5e67ec7a1da8bbbe91e1e068ad3a
Deleted: sha256:5f78154d356577280e4ac0d9bf0d021d488828e57f953b011dcbadaecd539ce4
Deleted: sha256:db5783668220e16186080f3e9d69ad748aab8c72abb8e457f6fc45369461634b
Deleted: sha256:07cab433985205f29909739f511777a810f4a9aff486355b71308bb654cdc868
2.3 镜像的导入和导出
2.3.1 保存镜像
docker save -o nginx nginx: latest
ls -lh nginx
[root@docker1 ~]# ls -lh
总用量 131M
-rw------- 1 root root 131M 9月 18 10:36 nginx
2.3.2 载入镜像的操作
方法一
docker load < nginx
方法二:
docker --input nginx
2.3.3 实例,将镜像复制到另一台进行导入
[root@docker1 ~]# ls -lh
总用量 131M
-rw------- 1 root root 131M 9月 18 10:36 nginx
将镜像拷贝到 另外一台OPT上
[root@docker1 ~]# scp nginx root@192.168.100.11:/opt
The authenticity of host '192.168.100.11 (192.168.100.11)' can't be established.
ECDSA key fingerprint is SHA256:z+83zi+ptU8EEYf7ccqK5tDPDLa8ekQe+pKQ+UKX72Y.
ECDSA key fingerprint is MD5:a9:be:c0:fa:44:1b:e6:84:83:78:55:2b:9f:88:c7:d6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.11' (ECDSA) to the list of known hosts.
root@192.168.100.11's password:
nginx 100% 131MB 109.5MB/s 00:01
在docker2 上将nginx 进行导入操作
[root@docker2 ~]# systemctl restart docker
[root@docker2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@docker2 ~]# cd /opt
[root@docker2 opt]# ls
containerd nginx rh
[root@docker2 opt]# docker load < nginx
07cab4339852: Loading layer 72.49MB/72.49MB
f431d0917d41: Loading layer 64.31MB/64.31MB
60c688e8765e: Loading layer 3.072kB/3.072kB
eabfa4cd2d12: Loading layer 4.096kB/4.096kB
908cf8238301: Loading layer 3.584kB/3.584kB
Loaded image: nginx:latest
导入成功
[root@docker2 opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 7e4d58f0e5f3 7 days ago 133MB
2.3.4 . DOCKER 镜像导出tar 包
docker save -o nginx.tar nginx:latest
或
docker save > nginx.tar nginx:latest
其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
镜像导入tar:
docker import nginx-test.tar nginx:imp
或
cat nginx-test.tar | docker import - nginx:imp
2.4 创建镜像的三种方式
2.4.1 基于现有容器镜像
//创建容器加载centos镜像
[root@docker2 opt]# docker create -it centos /bin/bash
99b1f22799146765b7c0aa61263e1d6ac96f2ae33a2bad54154be71e594e8b64
[root@docker2 opt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99b1f2279914 centos "/bin/bash" 8 seconds ago Created gallant_fermat
0b152c50576d centos "/bin/bash" 14 minutes ago Exited (0) 9 minutes ago db1
bc0dbbdd3408 centos "/bin/bash" 16 minutes ago Exited (0) 15 minutes ago web100
基于容器中的镜像,创建一个新镜像daoke:centos
-m 说明文字 -a 作者 镜像名
[root@docker2 opt]# docker commit -m "new" -a "daoke" 99b1f2279914 daoke:centos
sha256:1d138a07d4902aaa794c52ccdc93b5183ad430db79b884acf659deb3df07331d
[root@docker2 opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daoke centos 1d138a07d490 10 seconds ago 215MB
nginx latest 7e4d58f0e5f3 9 days ago 133MB
centos latest 0d120b6ccaa8 5 weeks ago 215MB
paigeeworld/centos7 latest 4cbe7aa905e7 6 years ago 382MB
2.4.2 基于本地模板创建
第二种,基于模板
首先下载模板文件
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
[root@docker2 opt]# ls
debian-7.0-x86-minimal.tar.gz
基于模板造一个新镜像 docker:new
[root@docker2 opt]# cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new
sha256:fcce02805fd38dc2b5ee2004a114ead3893ac05e93c9e888739741c6a5e0adfe
[root@docker2 opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daoke new fcce02805fd3 6 seconds ago 215MB
daoke centos 1d138a07d490 6 minutes ago 215MB
centos latest 0d120b6ccaa8 5 weeks ago
2.4.3 基于dockerfile 自定义
创建Dockerfile文件
创建 apache 文件夹
mkdir apache
造 三个配置文件
第一个文件
创建Dockerfile
vim Dockerfile
FROM centos:7
MAINTAINER THIS IS SHA # 描述信息
RUN yum -y update
RUN yum -y install httpd
EXPOSE 80
ADD index.html /var/www/html/index.html #宿主机当前路径 容器镜像的绝对路径
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
第2个文件,因为本地没有此文件,所以需要创建
vim index.html
<h1>this is sha <h1>
第3个文件,因为本地没有此文件,所以需要创建
vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
~运行
[root@docker1 apache]# docker build -t httpd:centos .
Sending build context to Docker daemon 5.12kB
Step 1/8 : FROM centos:7
7: Pulling from library/centos
75f829a71a1c: Pull complete
Digest: sha256:19a79828ca2e505eaee0ff38c2f3fd9901f4826737295157cc5212b7a372cd2b
Status: Downloaded newer image for centos:7
---> 7e6257c9f8d8
Step 2/8 : MAINTAINER THIS IS SHA
---> Running in 77967ea2b622
Removing intermediate container 77967ea2b622
---> 7f6406113ce3
Step 3/8 : RUN yum -y install httpd
---> Running in 0aec6932aaac
Loaded plugins: fastestmirror, ovl
....................................................
..................................................
Complete!
Removing intermediate container 0aec6932aaac
---> 26c0482b9540
Step 4/8 : EXPOSE 80
---> Running in db3674af6903
Removing intermediate container db3674af6903
---> 0cc8dd1e9cc4
Step 5/8 : ADD index.html /var/www/html/index.html
---> fa2735c4e125
Step 6/8 : ADD run.sh /run.sh
---> 66be69dbf3c9
Step 7/8 : RUN chmod 755 /run.sh
---> Running in 858f1581b77d
Removing intermediate container 858f1581b77d
---> bbde7812ef10
Step 8/8 : CMD ["/run.sh"]
---> Running in a8de92918e2b
Removing intermediate container a8de92918e2b
---> e0954567d36f
Successfully built e0954567d36f
Successfully tagged httpd:centos
结束
运行成功
2.4.4 端口的映射 操作,及访问httpd首页测试(接上一步)
小P是手工指定
//将宿主机的外8080端口 映射到容器的80端口
[root@docker1 apache]# docker run -dp 8080:80 httpd:centos /
b2cfe6c22a22ece1601f7ca64451c34f9e49b90315ff103afd499c463ebf999a
[root@docker1 apache]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b2cfe6c22a22 httpd:centos "/run.sh" 14 seconds ago Up 13 seconds 0.0.0.0:8080->80/tcp stoic_jennings
7eafa85b8f22 tomcat "/usr/bin/bash -c ls" 2 days ago Created 8080/tcp epic_meninsky
2d1960122721 tomcat "/usr/bin/bash -c ls…" 2 days ago Created 8080/tcp nice_matsumoto
0f52bf5f26ff 7e4d58f0e5f3 "/docker-entrypoint.…" 2 days ago Exited (127) 2 days ago eloquent_payne
5fd35266ee99 paigeeworld/centos7 "/usr/bin/bash -c ls" 2 days ago Exited (0) 2 days ago thirsty_jang
eae81d235bc9 paigeeworld/centos7 "/usr/bin/bash -c ls/" 2 days ago Exited (127) 2 days ago confident_kowalevski
[root@docker1 apache]#
访问 httpd 网页测试
2.4.5 端口映射 大P 是随机指定端口
[root@docker2 apache]# docker run -d -P httpd:centos
27e80f59c57acb58a5be8e157b1f8cd4ebe4dc10be2dbd297859cd0d48041cd6
[root@docker2 apache]# docker ps -a //查看自动生成的端口号 32768
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
27e80f59c57a httpd:centos "/run.sh" 29 seconds ago Up 28 seconds 0.0.0.0:32768->80/tcp funny_torvalds
7fadd2e6a90b registry "/entrypoint.sh /etc…" 2 hours ago Up 2 hours 0.0.0.0:5000->5000/tcp trusting_dijkstra
3f917b9bae94 registry "/entrypoint.sh /bin…" 2 hours ago Created zen_wright
[root@docker2 apache]#
访问测试
2.5 公有仓库的上传
2.5.1公有仓库,需要到docker 官网 注册账号,通过登录等一系列操作
2.6 私有仓库的创建与镜像上传下载
自定义仓库
私有仓库端口 号 5000
2.6.1 先下载 docker pull registry
2.6.2 指定本地的作为端口,端口号为5000
docke 进程启动 会加载此配置文件
[root@docker1 docker]# vim daemon.json
{
"insecure-registries" :["192.168.100.11:5000"],
"registry-mirrors": ["https://*******.mirror.aliyuncs.com"]
}
重启服务生效
[root@docker1 docker]# systemctl restart docker
[root@docker2 opt]# docker ps -a //查看容器
CONTAINER ID IMAGE COMMAND CREATED STAT
[root@docker2 opt]# docker images // 查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
daoke new fcce02805fd3 10 minutes ago 215MB
daoke centos 1d138a07d490 17 minutes ago 215MB
centos latest 0d120b6ccaa8 5 weeks ago 215MB
registry latest 2d4f4b5309b1 3 months ago 26.2MB
paigeeworld/centos7 latest 4cbe7aa905e7 6 years ago 382MB
2.6.3 创建容器 加载registry
[root@docker2 opt]# docker create -it registry /bin/bash
2.6.4 宿主机的/data/registry自动创建挂载容器中的/tmp/registry
-d 守护进程,让容器一直运行
[root@docker2 opt]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
7fadd2e6a90b0af5d98fba3b675334ee6dbb0b4eb6b48d8ed3d693a482ff2b6d
2.6.5 更改镜像标记格式,只有改成此格式才可上传
[root@docker2 opt]# docker tag daoke:centos 192.168.100.11:5000/docker
[root@docker2 opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daoke new fcce02805fd3 18 minutes ago 215MB
192.168.100.11:5000/docker latest 1d138a07d490 24 minutes ago 215MB
2.6.6 上传镜像到私有仓库
[root@docker2 opt]# docker push 192.168.100.11:5000/docker
The push refers to repository [192.168.100.11:5000/docker]
291f6e44771a: Pushed
latest: digest: sha256:3cc18fa35d1b8f8c558fd10c415fa06ea732162f8bb0860952b56a9897b6e93a size: 529
2.6.7 查看镜像
[root@docker2 opt]# curl -XGET http://192.168.100.11:5000/v2/_catalog
{"repositories":["docker"]}
2.6.8 从私有仓库中将镜像下载回本地
[root@docker2 opt]# docker pull 192.168.100.11:5000/docker
Using default tag: latest
latest: Pulling from docker
3c72a8ed6814: Pull complete
Digest: sha256:3cc18fa35d1b8f8c558fd10c415fa06ea732162f8bb0860952b56a9897b6e93a
Status: Downloaded newer image for 192.168.100.11:5000/docker:latest
192.168.100.11:5000/docker:latest
[root@docker2 opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.100.11:5000/docker latest 1d138a07d490 31 minutes ago 215MB
registry latest 2d4f4b5309b1 3 months ago 26.2MB
paigeeworld/centos7 latest 4cbe7aa905e7 6 years ago 382MB