安装Docker
#卸载旧版本的docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#安装依赖包
yum install -y yum-utils
#安装镜像仓库
官方:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
阿里云:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
/etc/yum.repos.d目录下生成docker-ce.repo镜像源
$ ll
总用量 36
-rw-r--r--. 1 root root 1664 9月 5 2019 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 9月 5 2019 CentOS-CR.repo
-rw-r--r--. 1 root root 649 9月 5 2019 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 314 9月 5 2019 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 630 9月 5 2019 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 9月 5 2019 CentOS-Sources.repo
-rw-r--r--. 1 root root 6639 9月 5 2019 CentOS-Vault.repo
-rw-r--r--. 1 root root 2640 3月 16 18:38 docker-ce.repo
#更新yum源
$ yum makecache fast
#列出并排序您的存储库中可用的版本
$ yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:20.10.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.4-3.el7 docker-ce-stable
#安装docker
$ yum install docker-ce docker-ce-cli containerd.io
#安装指定版本,包名称(docker-ce)加上版本字符串(第2列),从第一个冒号(:)开始,直到第一个-连字符。例如,docker-ce-18.09.1
$ yum install docker-ce-20.10.4 docker-ce-cli-20.10.4 containerd.io docker-compose-plugin
#docker设为自启动,并启动docker
$ systemctl enable docker --now
#判断是否启动成功
$ docker version
Client: Docker Engine - Community
Version: 19.03.12
API version: 1.40
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:46:54 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.12
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:45:28 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
$ docker run hello-world
#查看镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat2 2.0 21447e933c27 11 hours ago 652MB
tomcat2 1.0 344c9bb253d1 12 hours ago 652MB
tomcat latest 2ae23eb477aa 4 days ago 647MB
nginx 1.18 2ad6b739fe1c 5 days ago 132MB
nginx latest 08393e824c32 5 days ago 132MB
mysql 5.7.31 718a6da099d8 5 days ago 448MB
portainer/portainer latest 62771b0b9b09 2 weeks ago 79.1MB
centos latest 831691599b88 7 weeks ago 215MB
centos 7.8.2003 afb6fca791e0 3 months ago 203MB
#删除docker
$ systemctl stop docker
$ yum remove docker-ce docker-ce-cli containerd.io
$ rm -rf /var/lib/docker
配置镜像加速
登录阿里云,查找到镜像加速地址,配置/etc/docker/daemon.json
{
"log-driver": "json-file" , #容器日志的默认驱动程序(默认为“ json-file”)
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"bip": "192.168.88.0/22", #指定docker0网桥IP
"registry-mirrors": ["https://t8meiwnm.mirror.aliyuncs.com"], #设置镜像加速
"insecure-registries": ["120.123.122.123:12312"] #设置私有仓库地址可以设为http
}
daemon.json参数详解
{
"api-cors-header":"", 在引擎API中设置CORS标头
"authorization-plugins":[], 要加载的授权插件
"bridge":"", 将容器附加到网桥
"cgroup-parent":"", 为所有容器设置父cgroup
"cluster-store":"", 分布式存储后端的URL
"cluster-store-opts":{}, 设置集群存储选项(默认map [])
"cluster-advertise":"", 要通告的地址或接口名称
"data-root":"",宿主机存放容器数据目录,默认/var/lib/docker/
"debug": true, 启用调试模式,启用后,可以看到很多的启动信息。默认false
"default-gateway":"", 容器默认网关IPv4地址
"default-gateway-v6":"", 容器默认网关IPv6地址
"default-runtime":"runc", 容器的默认OCI运行时(默认为" runc")
"default-ulimits":{}, 容器的默认ulimit(默认[])
"dns": ["192.168.1.1"], 设定容器DNS的地址,在容器的 /etc/resolv.conf文件中可查看。
"dns-opts": [], 容器 /etc/resolv.conf 文件,其他设置
"dns-search": [], 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的 主机时,DNS不仅搜索host,还会搜索host.example.com 。 注意:如果不设置, Docker 会默认用主机上的 /etc/resolv.conf 来配置容器。
"exec-opts": [], 运行时执行选项
"exec-root":"", 执行状态文件的根目录(默认为’/var/run/docker‘)
"fixed-cidr":"", 容器ip需要符合IPv4地址
"fixed-cidr-v6":"", 容器ip需要符合IPv6地址
"group": "", UNIX套接字的组(默认为"docker")
"hosts": [], 设置容器hosts
"icc": false, 启用容器间通信(默认为true)
"ip":"0.0.0.0", 绑定容器端口时的默认IP(默认0.0.0.0)
"iptables": false, 启用iptables规则添加(默认为true) "ipv6": false, 启用IPv6网络
"ip-forward": false, 默认true, 启用 net.ipv4.ip_forward ,进入容器后使用 sysctl -a | grepnet.ipv4.ip_forward 查看
"ip-masq":false, 启用IP伪装(默认为true)
"labels":["nodeName=node-121"], docker主机的标签,很实用的功能,例如定义:–label nodeName=host-121
"live-restore": true, 在容器仍在运行时启用docker的实时还原
"log-driver":"", 容器日志的默认驱动程序(默认为" json-file")
"log-level":"", 设置日志记录级别("调试","信息","警告","错误","致命")(默认为"信息")
"max-concurrent-downloads":3, 设置每个请求的最大并发下载量(默认为3)
"max-concurrent-uploads":5, 设置每次推送的最大同时上传数(默认为5)
"mtu": 0, 设置容器网络MTU
"oom-score-adjust":-500, 设置守护程序的oom_score_adj(默认值为-500)
"pidfile": "", Docker守护进程的PID文件
"raw-logs": false, 全时间戳机制
"selinux-enabled": false, 默认 false,启用selinux支持
"storage-driver":"", 要使用的存储驱动程序
"swarm-default-advertise-addr":"", 设置默认地址或群集广告地址的接口
"tls": true, 默认 false, 启动TLS认证开关
"tlscacert": "", 默认 ~/.docker/ca.pem,通过CA认证过的的certificate文件路径
"tlscert": "", 默认 ~/.docker/cert.pem ,TLS的certificate文件路径
"tlskey": "", 默认~/.docker/key.pem,TLS的key文件路径
"tlsverify": true, 默认false,使用TLS并做后台进程与客户端通讯的验证
"userland-proxy":false, 使用userland代理进行环回流量(默认为true)
"userns-remap":"", 用户名称空间的用户/组设置
"bip":"192.168.88.0/22", 指定网桥IP
"registry-mirrors": ["https://192.498.89.232:89"], 设置镜像加速
"insecure-registries": ["120.123.122.123:12312"], 设置私有仓库地址可以设为http
"storage-opts": [
"overlay2.override_kernel_check=true",
"overlay2.size=15G"
], 存储驱动程序选项
"log-opts": {
"max-file": "3",
"max-size": "10m",
}, 容器默认日志驱动程序选项
"iptables": false 启用iptables规则添加(默认为true)
}
重启docker
$ systemctl daemon-reload
$ systemctl restart docker
卸载Docker
$ systemctl stop docker
$ systemctl disable docker
$ yum remove docker-ce docker-ce-cli containerd.io
$ rm -rf /var/lib/docker
$ rm -rf /var/lib/containerd
docker常用命令
帮助命令
docker version #显示docker版本信息
docker info #显示docker系统信息,镜像数量
docker --help #docker帮助文档
镜像命令
镜像介绍:
镜像是分层的。docker save -o aa.tar 镜像后解压aa.tar。会出现以下层级:两个文件夹、两个json文件
$ ll
total 818196
drwxr-xr-x. 18 root root 232 Jul 1 14:26 36571afe6d2548cfc84668e896ac888dbd71e2e4ab0f04c99689c27679fb4a2b
drwxr-xr-x. 3 root root 62 Jul 1 14:26 706d821f8350705241faed7f1e6e79ab5bcd791cff4ca481c119993190bf3272
-rw-r--r--. 1 root root 1817 Jun 17 20:18 af0d3f5bc593b26a2a8fc9428e9a5257bd614f00bebb7d2dae72ecb21e52607a.json
-rw-------. 1 root root 837820928 Jul 1 14:24 a.tar
-rw-r--r--. 1 root root 266 Jan 1 1970 manifest.json
作用:
manifest.json:镜像制作的层级结构,例如是哪层是最底层,哪层是最上层会在文件中展示
af0d3f5bc593b26a2a8fc9428e9a5257bd614f00bebb7d2dae72ecb21e52607a.jso:元数据,例如镜像的制作时间、作者
文件夹中层级:一个压缩包、一个json文件,一个版本文件
$ ls
json layer.tar VERSION
作用:
json文件:元数据,这一层镜像的制作时间、作者
layer.tar:发生的文件变化会打包在该文件里
VERSION:版本号
docker images
$ docker images #显示所有镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat2 2.0 21447e933c27 12 hours ago 652MB
tomcat2 1.0 344c9bb253d1 12 hours ago 652MB
tomcat latest 2ae23eb477aa 4 days ago 647MB
nginx 1.18 2ad6b739fe1c 5 days ago 132MB
nginx v2.0.8.3.9.2latest 08393e824c32 5 days ago 132MB
mysql 5.7.31 718a6da099d8 5 days ago 448MB
portainer/portainer latest 62771b0b9b09 2 weeks ago 79.1MB
centos latest 831691599b88 7 weeks ago 215MB
centos 7.8.2003 afb6fca791e0 3 months ago 203MB
REPOSITORY:镜像仓库
TAG :版本
IMAGE ID:镜像版本
CREATED:镜像创建时间
SIZE:大小
#可选项
$ docker images --help
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all #显示所有镜像
-q, --quiet #只显示镜像ID
docker pull
$ docker pull mysql #获取镜像 docker pull mysql:5.7.31
Using default tag: latest #如果不写,tag默认为最新
latest: Pulling from library/mysql
bf5952930446: Already exists
8254623a9871: Already exists
938e3e06dac4: Already exists
ea28ebf28884: Already exists
f3cef38785c2: Already exists
894f9792565a: Already exists
1d8a57523420: Already exists
6c676912929f: Pull complete
ff39fdb566b4: Pull complete
fff872988aba: Pull complete
4d34e365ae68: Pull complete
7886ee20621e: Pull complete
Digest: sha256:c358e72e100ab493a0304bda35e6f239db2ec8c9bb836d8a427ac34307d074ed
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
docker pull mysql = docker pull docker.io/library/mysql:latest
docker push
#以推送至阿里云为例
#先登录
$ docker login --username=xxxx registry.cn-shanghai.aliyuncs.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
#给推送镜像打上符合推送标准的标签
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/xxxx/nginx:[镜像版本号]
#推送镜像至镜像库
$ docker push registry.cn-hangzhou.aliyuncs.com/xxxx/nginx:[镜像版本号]
docker rmi
$ docker rmi -f 831691599b88(镜像ID) #删除镜像
Untagged: centos:latest
Untagged: centos@sha256:4062bbdd1bb0801b0aa38e0f83dece70fb7a5e9bce223423a68de2d8b784b43b
Deleted: sha256:831691599b88ad6cc2a4abbd0e89661a121aff14cfa289ad840fd3946f274f1f
Deleted: sha256:eb29745b8228e1e97c01b1d5c2554a319c00a94d8dd5746a3904222ad65a13f8
#删除所有镜像
$ docker rmi -f $(docker images -qa)
docker tag
#将镜像ubuntu:15.10标记runoob/ubuntu:v3 镜像
$ docker tag ubuntu:15.10 runoob/ubuntu:v3
$ docker images runoob/ubuntu:v3
EPOSITORY TAG IMAGE ID CREATED SIZE
runoob/ubuntu v3 4e3b13c8a266 3 months ago 136.3 MB
#当镜像中存在<none>如果使用image iD打标签,不会复制一个新的镜像,会在原有的基础上更新
docker save
#将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文档
$ docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3 #-o参数:输出到某个文件
#如果使用镜像ID打包会丢失tag标签
$ docker save -o aaa.tar 80d28bedfe5d
$ docker load -i aaa.tar
ba0dae6243cc: Loading layer [==================================================>] 684.5kB/684.5kB
Loaded image ID: sha256:80d28bedfe5dec59da9ebf8e6260224ac9008ab5c11dbbe16ee3ba3e4439ac2c
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 80d28bedfe5d 2 years ago 683kB
docker load
#导入使用 docker save 命令导出的镜像
#--input , -i : 指定导入的文件,
#--quiet , -q : 精简输出信息
#如果出现load镜像后tag信息丢失是因为save时使用的tag 则会保存 tag信息,如果使用image ID 则会丢失
$ docker load -i my_ubuntu_v3.tar
容器命令
容器运行的最低标准:必须拥有前台进程,
例如:/usr/local/nginx/sbin/nginx 无法启动容器,因为该命令启动后就会退出。
使用 /usr/local/nginx/sbin/nginx && tail -f /usr/local/nginx/logs/access.log 或者nginx -g "daemon off;"
docker run
#运行容器
$ docker run --name mynginx --restart=always -d -p 88:80
#可选项
--name #容器启动后显示名称
-it #交互方式运行
-d #后台方式运行
-p #端口映射 -p 88:80 主机的88映射到容器的80
-h #指定容器主机名,默认主机名为容器id
--rm #退出后立即删除容器。不加rm参数时,docker stop的容器可以在docker ps -a看到,加了rm参数,停止时自动删除
--restart=always #容器开机自启
docker commit
#1、提交镜像 2、备份容器
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab91b0164917 nginx "/docker-entrypoint.…" 4 seconds ago Up 2 seconds 0.0.0.0:88->80/tcp mynginx
$ docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
$ docker commit -a "jss" ab91b0164917(容器id) newnginx:v1.0(新标签)
#可选项
-a, --作者
-c, --修改列表
-m, --提交信息
-p, --暂停运行中的容器 默认为true
docker ps
#列出正在运行的镜像
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
524364ed36f3 tomcat2:2.0 "catalina.sh run" 12 hours ago Up 12 hours 0.0.0.0:8080->8080/tcp tomcat2
#可选项
$ docker ps --help
Usage: docker ps [OPTIONS]
List containers
Options:
-a, --all #列出所有镜像,会将之前停止的也列出来
-q, --quiet #只列出镜像ID
退出容器(容器会停止):exit
容器不停止退出:ctrl+p+q
docker rm
#删除容器
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aff8853f54bc centos:7.8.2003 "bash" 4 minutes ago Exited (0) 4 minutes ago sweet_sammet
e5003806cd8d centos:7.8.2003 "bash" 25 minutes ago Exited (0) 25 minutes ago frosty_mestorf
e4e300574780 centos:7.8.2003 "/bin/bash" 26 minutes ago Exited (0) 26 minutes ago competent_beaver
524364ed36f3 tomcat2:2.0 "catalina.sh run" 12 hours ago Up 12 hours 0.0.0.0:8080->8080/tcp tomcat2
809ca9a10ef9 portainer/portainer "/portainer" 13 hours ago Exited (2) 12 hours ago portainer
$ docker rm -f aff8853f54bc(容器ID)
#删除所有容器
$ docker rm -f $(docker ps -qa)
docker start/stop/restart/kill
$ docker start 容器ID #启动容器
$ docker stop 容器ID #停止容器
$ docker restart 容器ID #重启容器
$ docker kill 容器ID #停止容器
docker logs
$ docker logs -ft 524364ed36f3(容器ID) #查看日志
docker top
$ docker top 524364ed36f3(容器ID) #查看进程信息
UID PID PPID C STIME TTY TIME CMD
root 30915 30899 0 8月09 pts/0 00:02:04 /usr/local/openjdk-11/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
docker stats
查看当前物理机资源占用情况
$ docker run --name nginx -d nginx
$ docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
d67541e18f0f nginx 0.00% 5.281MiB / 7.795GiB 0.07% 516B / 0B 0B / 14.8kB 9
docker inspect
$ docker inspect 524364ed36f3(容器ID) #查看元数据
[
{
"Id": "524364ed36f37cc8f1ab0fa1a935fde821bdd55c2ad0197e6cb65b2951c5a841",
"Created": "2020-08-09T14:35:06.520157859Z",
"Path": "catalina.sh",
"Args": [
"run"
],
"State": {
....
]
docker exec
$ docker exec -it 524364ed36f3(容器ID) /bin/bash #进入正在运行的容器
-i #交互模式打开
-t #打开tty的窗口
root@524364ed36f3:/usr/local/tomcat#
docker cp
$ docker cp 524364ed36f3(容器ID):/usr/local/tomcat/README.md(容器内部路径) /opt/(容器外路径)
$ ll /opt/
总用量 4
drwxr-xr-x. 2 root root 6 8月 7 21:56 aaaa
drwx--x--x. 4 root root 28 8月 6 17:09 containerd
-rw-r--r--. 1 root root 3255 7月 1 04:14 README.md
docker安装Nginx
$ docker pull nginx #获取镜像(默认最新的镜像)
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat2 2.0 21447e933c27 13 hours ago 652MB
tomcat2 1.0 344c9bb253d1 13 hours ago 652MB
tomcat latest 2ae23eb477aa 4 days ago 647MB
nginx 1.18 2ad6b739fe1c 5 days ago 132MB
nginx latest 08393e824c32 5 days ago 132MB
$ docker run -it -d --name nginx -p 80:80 nginx #后台运行nginx 把容器80端口映射为服务器80端口 运行名称 nginx
b04596afba6008b8e717f1f2b9653191934dafde2e79295745d8e0bf8c15b7c6
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b04596afba60 nginx "/docker-entrypoint.…" 3 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp nginx
#测试
$ curl localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>