一、下载安装
官方rpm包下载地址:
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
二进制下载地址:
https://download.docker.com/
https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/
阿里镜像下载地址:
https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/
1.1 yum 安装
[[email protected] ~]# rm -f /etc/yum.repos.d/*
[[email protected] ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[[email protected] ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[[email protected] ~]# yum makecache
[[email protected] ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[[email protected] ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[[email protected] ~]# sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
[[email protected] ~]# yum -y install docker-ce
[[email protected] ~]# docker --version
Docker version 20.10.8, build 3967b7d
1.2 二进制安装
下载并解压安装包
#下载二进制包
[[email protected] ~]# cd /usr/local/src/
[[email protected] src]# wget https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-18.09.9.tgz
[[email protected] src]# tar xf docker-18.09.9.tgz
[[email protected] src]# cd docker
[[email protected] docker]# ls
containerd containerd-shim ctr docker dockerd docker-init docker-proxy runc
[[email protected] docker]# cp ./* /usr/bin/
创建启动文件
需要如下三个添加文件
/lib/systemd/system/docker.service
/lib/systemd/system/docker.socket
/lib/systemd/system/containerd.service #18.06及之前的docker版本不需要此文件
注:不同版本docker的启动文件不同,建议从其他已安装好同版本docker的服务器拷贝对应文件,如下使用的是18.09.9版本的启动文件
/lib/systemd/system/docker.service
[[email protected] docker]# vim /lib/systemd/system/docker.service
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
/lib/systemd/system/docker.socket
[email protected]:~# vim /lib/systemd/system/docker.socket
[Unit]
Description=Docker Socket for the API
PartOf=docker.service
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
/lib/systemd/system/containerd.service
[email protected]:~# vim /lib/systemd/system/containerd.service
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=1048576
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
启动验证
[[email protected] docker]# systemctl daemon-reload
[[email protected] docker]# systemctl start docker
[[email protected] docker]# systemctl enable docker
1.3 ubuntu安装docker
[email protected]:~# curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
[email protected]:~# add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
[email protected]:~# apt-get -y update
[email protected]:~# apt-get -y install docker-ce
#安装指定版本
#查看docker-ce版本
[email protected]:~# apt-cache madison docker-ce
[email protected]:~# apt-get -y install docker-ce=5:18.09.9~3-0~ubuntu-bionic docker-ce-cli=5:18.09.9~3-0~ubuntu-bionic
#启动docker
[email protected]:~# systemctl start docker
[email protected]:~# systemctl enable docker
验证docker服务启动
验证docker版本
查看docker0网卡
1.4 验证docker 信息
[email protected]:~# docker info
Containers: 0 #当前主机运行的容器总数
Running: 0 #容器正在运行的数量
Paused: 0 #容器暂停数量
Stopped: 0 # 容器停止数量
Images: 0 #镜像数量
Server Version: 18.09.9 #docker服务端版本
Storage Driver: overlay2 #存储引擎
Backing Filesystem: extfs #宿主机文件系统
Supports d_type: true #是否支持d_type
Native Overlay Diff: true #是否支持差异数据存储
Logging Driver: json-file #日志类型
Cgroup Driver: cgroupfs #Cgroups类型
Plugins: #插件
Volume: local #卷
Network: bridge host macvlan null overlay # overlay夸主机通信
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog #日志类型
Swarm: inactive #是否支持swarm
Runtimes: runc #已安装的容器运行时
Default Runtime: runc #默认使用的容器运行时
Init Binary: docker-init #初始化容器的守护进程,即pid为1的进程
containerd version: e25210fe30a0a703442421b0f60afac609f950a3 #版本
runc version: N/A # runc版本
init version: fec3683 #init版本
Security Options: #安全选项
apparmor #安全模块
seccomp #审计(操作)
Profile: default #默认的配置文件
Kernel Version: 4.15.0-55-generic #宿主机内核版本
Operating System: Ubuntu 18.04.3 LTS #宿主机操作系统
OSType: linux #宿主机操作系统类型
Architecture: x86_64 #宿主机架构
CPUs: 4 #宿主机CPU数量
Total Memory: 3.83GiB #宿主机总内存
Name: docker-node1 #宿主机hostname
ID: H7Z5:LPWT:G4GE:P6RH:6POO:5SCV:UZ6D:ZRVX:KSES:QIRH:S7W6:SXWB #宿主机ID
Docker Root Dir: /var/lib/docker #宿主机数据保存目录
Debug Mode (client): false #client端是否开启debug
Debug Mode (server): false #server端是否开启debug
Registry: https://index.docker.io/v1/ #镜像仓库
Labels: #其他标签
Experimental: false #是否测试版
Insecure Registries: #非安全的镜像仓库
127.0.0.0/8
Live Restore Enabled: false #是否开启活动重启(重启docker-daemon不关闭容器)
Product License: Community Engine #产品许可信息
WARNING: No swap limit support #系统警告信息(没有开启swap资源限制)
[email protected]:~#
1.5 解决不支持swap限制警告
[email protected]:~# vim /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=2
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
#添加cgroup_enable=memory swapaccount=1
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 cgroup_enable=memory swapaccount=1"
[email protected]:~# update-grub
[email protected]:~# reboot
1.6 docker存储引擎
目前docker的默认存储引擎为overlay2,不同的存储引擎需要相应的系统支持,如xfs格式需要磁盘分区的时候传递d-type文件分层功能,即需要传递内核参数开启格式化磁盘的时候的指定功能。
历史更新信息: https://github.com/moby/moby/blob/master/CHANGELOG.md
官方文档关于存储引擎的选择文档: https://docs.docker.com/storage/storagedriver/select-storage-driver/
存储驱动类型:
AUFS(AnotherUnionFS)是一种Union FS,是文件级的存储驱动。所谓 UnionFS 就是把不同物理位置的目录合并 mount到同一个目录中。简单来说就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统。这种文件系统可以一层一层地叠加修改文件。无论底下有多少层都是只读的,只有最上层的文件系统是可写的。当需要修改一个文件时,AUFS创建该文件的一个副本,使用CoW将文件从只读层复制到可写层进行修改,结果也保存在可写层。在Docker中,底下的只读层就是image,可写层就是Container,是Docker 18.06及更早版本的首选存储驱动程序,在内核3.13上运行Ubuntu 14.04时不支持overlay2。
Overlay:一种Union FS文件系统,Linux内核3.18后支持。
overlay2: Overlay的升级版,到目前为止,所有Linux发行版推荐使用的存储类型。
devicemapper:是CentOS和RHEL的推荐存储驱动程序,因为之前的内核版本不支持overlay2,但是当前较新版本的CentOS和RHEL现在已经支持overlay2,因此推荐使用overlay2。
ZFS(Sun-2005)/btrfs(Oracle-2007):目前没有广泛使用。
vfs:用于测试环境,适用于无法使用copy-on-write文件系统的情况。 此存储驱动程序的性能很差,通常不建议用于生产。
Docker官方推荐首选存储引擎为overlay2,devicemapper存在使用空间方面的一些限制,虽然可以通过后期配置解决,但是官方依然推荐使用overlay2,以下是网上查到的部分资料:
https://www.cnblogs.com/youruncloud/p/5736718.html
如果docker数据目录是一块单独的磁盘分区而且是xfs格式的,那么需要在格式化的时候加上参数-n ftype=1,否则后期在启动容器的时候会报错不支持d-type。
1.7 docker服务进程
通过查看docker进程,了解docker的运行及工作方式
1.7.1 查看宿主机进程树
18.06以上docker版本,进程关系
#docker版本
[email protected]:~# docker version
Client:
Version: 18.09.9
API version: 1.39
Go version: go1.11.13
Git commit: 039a7df9ba
Built: Wed Sep 4 16:57:28 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.9
API version: 1.39 (minimum version 1.12)
Go version: go1.11.13
Git commit: 039a7df
Built: Wed Sep 4 16:19:38 2019
OS/Arch: linux/amd64
Experimental: false
在创建容器的时候dockerd进程通过调用containerd进程创建容器
18.06及之前的docker版本,进程关系
1.7.2 查看containerd进程关系
有四个进程:
dockerd:被client直接访问,其父进程为宿主机的systemd守护进程。
docker-proxy:实现容器通信,其父进程为dockerd
containerd:被dockerd进程调用以实现与runc交互。
containerd-shim:真正运行容器的载体,其父进程为containerd。
1.8 docker 镜像加速配置
国内下载国外的镜像有时候会很慢,因此可以更改docker配置文件添加一个加速器,可以通过加速器达到加速下载镜像的目的。
1.8.1 获取加速地址:
登入到阿里云 http://cr.console.aliyun.com,点击左侧的镜像加速器,将会得到一个专属的加速地址,而且下面有使用配置说明:
按照阿里云的说明添加配置
[email protected]:~# sudo mkdir -p /etc/docker
[email protected]:~# sudo tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://bn3x0oxu.mirror.aliyuncs.com"]
> }
> EOF
{
"registry-mirrors": ["https://bn3x0oxu.mirror.aliyuncs.com"]
}
[email protected]:~# systemctl daemon-reload
[email protected]:~# systemctl restart docker
二、基础命令介绍
2.1 Docker镜像管理命令
搜索镜像
在官方的docker 仓库中搜索指定名称的docker镜像
#不带版本号搜索镜像
[email protected]:~# docker search nginx
#带版本号搜索镜像
[email protected]:~# docker search nginx:1.21-alpine
下载镜像
docker pull 仓库服务器:端口/项目名称/镜像名称:tag(版本)号
注:不带版本号会拉取latest,也就是最新版本
[email protected]:~# docker pull nginx:1.21-alpine
1.21-alpine: Pulling from library/nginx
a0d0a0d46f8b: Pull complete
4dd4efe90939: Pull complete
c1368e94e1ec: Pull complete
3e72c40d0ff4: Pull complete
969825a5ca61: Pull complete
61074acc7dd2: Pull complete
Digest: sha256:686aac2769fd6e7bab67663fd38750c135b72d993d0bb0a942ab02ef647fc9c3
Status: Downloaded newer image for nginx:1.21-alpine
查看本地镜像
[email protected]:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.21-alpine 513f9a9d8748 5 days ago 22.9MB
nginx latest ad4c705f24d3 5 days ago 133MB
镜像导出
可以将镜像从本地导出问为一个压缩文件,然后复制到其他服务器进行导入使用。
[email protected]:~# docker save nginx:1.21-alpine > nginx.tar
[email protected]:~# ls
nginx.tar
镜像导入
[email protected]:~# docker load <nginx.tar
e2eb06d8af82: Loading layer [==================================================>] 5.865MB/5.865MB
e6d3cea19fef: Loading layer [==================================================>] 18.57MB/18.57MB
20d0effdf3a2: Loading layer [==================================================>] 3.072kB/3.072kB
311d8db33235: Loading layer [==================================================>] 4.096kB/4.096kB
b4b4e85910ea: Loading layer [==================================================>] 3.584kB/3.584kB
40403bebe4fd: Loading layer [==================================================>] 7.168kB/7.168kB
Loaded image: nginx:1.21-alpine
删除镜像
[email protected]:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.21-alpine 513f9a9d8748 5 days ago 22.9MB
nginx latest ad4c705f24d3 5 days ago 133MB
[email protected]:~# docker rmi 513f9a9d8748
[email protected]:~# docker rmi nginx:1.21-alpine
#可以使用镜像id或者名称加版本号
2.2 容器操作基础命令
命令格式:
docker run [选项] [镜像名] [shell命令] [参数]
-d 后台运行容器,并返回容器ID
-i 以交互模式运行容器,通常与 -t 同时使用
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-v 将宿主机目录挂载到容器
-P 随机端口映射,容器内部端口随机映射到主机的端口
-p 指定端口映射,格式为:宿主机端口:容器端口
--rm 容器退出后自动删除容器
--name name 为容器指定一个名称
--dns 8.8.8.8 指定容器使用的DNS服务器,默认和宿主一致
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致
-h name 指定容器的hostname
-e name=value 设置环境变量
--env-file file 从指定文件读入环境变量
--link name 链接到另一个容器
2.2.1 启动容器
[email protected]:~# docker run -it -d -p 80:80 --name nginx nginx:1.21-alpine
b0391ede9ac256a1402561b2794ad7607961c4604f21e3f8805186e5e8328cd6
2.2.2 创建并进入容器
通过在启动容器的时候执行/bin/bash或/bin/sh 直接进入到容器
[email protected]:~# docker run -it -p 80:80 --name nginx nginx:1.21-alpine /bin/sh
/ # ls
2.2.3 进入已创建的容器
前面是在创建容器的直接进入到容器,通过docker exec -it 容器id可以进入到已创建的容器内
2.2.4 查看容器
通过docker ps可以查看宿主机运行的容器
#查看运行的容器
[email protected]:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b0391ede9ac2 nginx:1.21-alpine "/docker-entrypoint.…" 31 seconds ago Up 30 seconds 0.0.0.0:80->80/tcp nginx
#查看所有容器
[email protected]:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c3c2cdf73e07 nginx:1.21-alpine "/docker-entrypoint.…" 27 seconds ago Exited (0) 2 seconds ago sad_dewdney
b0391ede9ac2 nginx:1.21-alpine "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp nginx
2.2.5 查看容器日志
[email protected]:~# docker logs --tail=10 -f nginx
2021/09/15 08:30:46 [notice] 1#1: using the "epoll" event method
2021/09/15 08:30:46 [notice] 1#1: nginx/1.21.3
2021/09/15 08:30:46 [notice] 1#1: built by gcc 10.3.1 20210424 (Alpine 10.3.1_git20210424)
2021/09/15 08:30:46 [notice] 1#1: OS: Linux 4.15.0-55-generic
2021/09/15 08:30:46 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/09/15 08:30:46 [notice] 1#1: start worker processes
2021/09/15 08:30:46 [notice] 1#1: start worker process 31
2021/09/15 08:30:46 [notice] 1#1: start worker process 32
2021/09/15 08:30:46 [notice] 1#1: start worker process 33
2021/09/15 08:30:46 [notice] 1#1: start worker process 34
2.2.6 传递运行命令
容器需要有一个前台运行的进程才能保持容器的运行,通过传递运行参数是一种方式,另外也可以在构建镜像的时候指定容器启动时运行的前台命令
2.2.7 容器停止关闭及删除
[email protected]:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
12d069e72f20 nginx:1.21-alpine "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp nginx
[email protected]:~# docker stop 12d069e72f20
12d069e72f20
[email protected]:~# docker start 12d069e72f20
12d069e72f20
[email protected]:~# docker rm -fv 12d069e72f20
12d069e72f20