Docker 的三大核心概念:
- 镜像 (Image)
- 容器(Container)
- 仓库(Repository)
(本文以Centos系统为演示用例,docker引擎为CE版本)
Docker 引擎是使用 Docker 容器的核心组件,可以在主流的操作系统和云平台上使用, 包括 Linux 操作系统(如 Ubuntu、 Debian, CentOS、 Red.hat 等), macOS 和 Windows 操作系统, 以及 IBM、亚马逊、微软等知名云平台。
用户可以访问 Docker 官网的 Get Docker ( https://www.docker.com/get-docker)页面,查 看获取 Docker 的方式,以及 Docker 支持的平台类型
目前 Docker 支持 Docker 引擎、 Docker Hub、 Docker Cloud 等多种服务。
Docker引擎:包括支持在桌面系统或云平台安装 Docker,以及为企业提供简单安全 弹性的容器集群编排和管理;
DockerHub :官方提供的云托管服务,可以提供公有或私有的镜像仓库;
DockerCloud :官方提供的容器云服务,可以完成容器的部署与管理,可以完整地支持容器化项目,还有 CI、 CD 功能。
Docker引擎 目前分为两个版本:社区版本( Community Edition, CE)和企业版本 (Enterprise Edition, EE)。 社区版本包括大部分的核心功能,企业版本则通过付费形式提供 认证支持、镜像管理、 容器托管、 安全扫描等高级服务。 通常情况下,用户使用社区版本可以满足大部分需求;若有更苛刻的需求,可以购买企业版本服务。 社区版本每个月会发布一次尝鲜( Edge)版本,每个季度( 3、 6、 9、 12 月)会发行一次稳定( Stable)版本。 版本号 命名格式为“年份.月份”,如 2018 年 6 月发布的版本号为 vl8.06。
CentOS 环境下安装 Docker
Docker 目前支持 CentOS 7 及以后的版本。 系统的要求:64 位操作系统,内核版本至少为 3.10。
首先,为了方便添加软件源,以及支持 devicemapper 存储类型,安装如下软件包:
$ sudo yum update
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加 Docker 稳定版本的 yum 软件源:
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
之后更新 yum 软件源缓存,并安装 Docker:
$ sudo yum update
$ sudo yum install -y docker-ce
最后,确认 Docker 服务启动正常 :
$ sudo systemctl start docker
$ sudo systemctl status docker
wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz
tar -xf docker-19.03.9.tgz
mv docker/* /usr/bin/
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://3s9106.mirror.alncs.com"]
}
EOF
#创建一个docker.service文件
vi /etc/systemd/system/docker.service
#内容如下:
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
chmod 777 /etc/systemd/system/docker.service
[root@node-251 docker]# systemctl daemon-reload
[root@node-251 docker]# systemctl start docker
[root@node-251 docker]# systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /etc/systemd/system/docker.service.
[root@node-251 docker]# docker -v
Docker version 19.03.9, build 9d988398e7
[root@node-251 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
/etc/systemd/system/docker.service
文件中如果如下启动
ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1
则在/etc/docker/daemon.json配置镜像加速的时候需要注意,添加的insecure-registries
的IP不能够和启动冲突
否则无法启动
注意:
不要删除/var/lib/docker
目录, 否则就会删除已安装的镜像及容器
不要删除/var/lib/docker
目录, 否则就会删除已安装的镜像及容器
不要删除/var/lib/docker
目录, 否则就会删除已安装的镜像及容器
如果已安装版本是通过yum安装的,卸载掉再重装就可以了
[root@localhost docker]# yum list installed | grep docker
docker.x86_64 2:1.13.1-209.git7d71120.el7.centos @extras
docker-client.x86_64 2:1.13.1-209.git7d71120.el7.centos @extras
docker-common.x86_64 2:1.13.1-209.git7d71120.el7.centos @extras
#卸载
[root@localhost ~]# yum -y remove docker*
#更新源
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#查看安装包
[root@localhost ~]# yum list docker-ce --showduplicates|sort -r
docker-ce.x86_64 3:18.09.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.5-3.el7 docker-ce-stable
docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.3.ce-1.el7 docker-ce-stable
#安装
[root@localhost ~]# yum -y install docker-ce-18.03.1.ce-1.el7.centos
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker --version
Docker version 18.03.1-ce, build 9ee9f40
报错1: Error response from daemon: Unknown runtime specified docker-runc
原因:这是因为低版本升级到高版本之后不兼容 修改参数进行解决
解决:更改/var/lib/docker/containers目录中的文件参数,把docker-runc替换为runc
grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g'
注:grep -rl:递归搜索目录和子目录,只列出含有匹配的文本行的文件名,而不显示具体的匹配内容
xargs:衔接执行之前得到的值
总体意思是把/var/lib/docker/containers中含有‘docker-runc’的文件搜索出来,并把‘docker-runc’字符为runc
报错2:Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/09f8444f734ca18130ac4e2dafdcd3a19dd2986c9474bd0a50c87c0af559a831/merged: invalid argument
原因:SELINUX要么都关闭,要么都开启
解决:推荐修改CentOS下的/etc/selinux/config 将SELINUX=disabled 改成 SELINUX=permissive
vi /etc/selinux/config
# 找到SELINUX=enable修改为SELINUX=permissive
SELINUX=permissive
# 保存
:wq
或者修改docker关闭selinux
vi /etc/sysconfig/docker
# 找到OPTIONS="--selinux-enabled --log-driver=journald --signature-verification=false"
# 删除 --selinux-enabled
OPTIONS="--log-driver=journald --signature-verification=false"
# 保存
:wq
另外docker-18.03已经废弃使用overlay1了,overlay2存储才是今后所支持的,因此不建议按照网上某文章的教程那样将docker的存储驱动改回overlay1。改回overlay1的方式只是治标不治本,正解是修改selinux配置。
报错3:Error response from daemon: manifest for jenkins:latest not found
原因:像jenkins或者某些软件没有最新版本(latest)
解决:所以并非docker的问题,手动指定版本pull即可
sudo docker stop $(docker ps -aq)
这个命令会停止所有容器,包括正在运行的容器和已经停止的容器。
sudo docker rm $(docker ps -aq)
这个命令会删除所有容器,包括正在运行的容器和已经停止的容器。
sudo docker rmi $(docker images -q)
这个命令会删除所有镜像,包括没有被容器使用的镜像。
sudo yum remove docker-ce docker-ce-cli containerd.io
这个命令会删除 Docker 引擎及其依赖的软件包和文件。
sudo rm -rf /var/lib/docker
这个命令会删除 Docker 数据目录,包括所有容器、镜像和数据卷。
完成上述步骤后,Docker 已经被完全卸载。