为什么会有docker出现?

一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。

安装的时候,把原始环境一模一样地复制过来。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。

一句话:解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

三要素:镜像(image)、容器(container)、仓库(repository)

能干什么?

可以这么理解:docker就是精华浓缩版的Linux系统

容器与镜像的关系类似于面向对象的对象与类的关系。

容器是用镜像创建的运行实例

docker 面向对象
容器 对象
镜像

安装docker

以CentOS7为例,采用离线安装

查看内核版本 uname -r #要求内核版本高于3.10

docker离线包下载地址:https://download.docker.com/linux/static/stable/x86_64/

docker官方文档操作:https://docs.docker.com/engine/install/binaries/#install-daemon-and-client-binaries-on-linux

为了方便处理,当前目录在 /usr/local,把docker离线包传到当前路径

一、将下载下来的离线包解压到 /usr/bin/ 上

1
2
3
4
5
6
7
8
9
10
[root@localhost local]# tar -xvf docker-19.03.9.tgz 
docker/
docker/docker-containerd
docker/docker-proxy
docker/docker
docker/docker-runc
docker/dockerd
docker/docker-containerd-ctr
docker/docker-containerd-shim
docker/docker-init

二、将解压出来的docker文件内容复制到 /usr/bin/ 目录下

1
cp docker/* /usr/bin/

三、将docker注册为service

1
vim /etc/systemd/system/docker.service

将下列配置加到docker.service中并保存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target

然后保存
四、启动

1
2
3
4
chmod +x /etc/systemd/system/docker.service   #添加文件权限并启动docker
systemctl daemon-reload                   #重载unit配置文件
systemctl start docker             #启动Docker
systemctl enable docker.service               #设置开机自启(会弹出一段东西,说明成功了,不用紧张~)

五、验证

1
2
3
5、验证
systemctl status docker     #查看Docker状态(会弹出一大堆东西,看见Active下有 active (running) 就说明运行成功)
docker -v                   #查看Docker版本(会弹出版本号)

六、更换阿里云的镜像
首先注册一个阿里云账户,链接:https://dev.aliyun.com/search.html(也可以支付宝扫码登陆,这里不再赘述)

进入【容器镜像服务】→【镜像加速器】获取(加速地址)

图片

复制文档命令然后回车执行

六、下载

如果链接不了网络,请参考这链接https://blog.csdn.net/baiyan3212/article/details/81172120

链接网络,测试能不能pull东西下来

1
[root@localhost docker]# docker pull tomcat

查看是否下载成功

1
[root@localhost ~]# docker images

七、使用

运行tomcat

1
[root@localhost ~]# docker run -p 80:8080 -d tomcat

查看是否运行成功
如果报错 OCI runtime create failed: container_linux.go:349 等信息,主要原因是内核docker版本不匹配导致。

使用yum update -y基本上能解决问题。

卸载

1
2
3
4
5
6
7
8
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine