CentOS下Docker安装
Docker支持以下的CentOS版本:
CentOS 7 (64-bit)
CentOS 6.5 (64-bit) 或更高的版本
参考:
https://www.runoob.com/docker/centos-docker-install.html
https://www.cnblogs.com/murry/p/9332747.html
1 前提条件
目前,CentOS 仅发行版本中的内核支持 Docker。
Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
2 使用 yum 安装(CentOS 7下)
Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
[root@localhost ~] uname -r
3.10.0-1062.1.1.el7.x86_64
3 安装 Docker
从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。
Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。
本文介绍 Docker CE 的安装使用。
移除旧的版本:
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
selinux关闭
查看
[root@dev-server ~] getenforce
Disabled
[root@dev-server ~] /usr/sbin/sestatus -v
SELinux status: disabled
临时关闭
##设置SELinux 成为permissive模式
##setenforce 1 设置SELinux 成为enforcing模式
setenforce 0
永久关闭
vi /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled
设置后需要重启才能生效
关闭防火墙
查看防火墙状态: systemctl status firewalld.service
绿的running表示防火墙开启
执行关闭命令: systemctl stop firewalld.service
再次执行查看防火墙命令:systemctl status firewalld.service
执行开机禁用防火墙自启命令 : systemctl disable firewalld.service
启动:systemctl start firewalld.service
防火墙随系统开启启动 : systemctl enable firewalld.service
配置yum源(这里可以保留自己需要的yum源,自己视情况而定)
[root@localhost ~] wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
...
[root@localhost ~]
[root@localhost ~] wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
...
[root@localhost ~]
[root@localhost ~] yum clean all
[root@localhost ~] yum makecache
确保 yum 包更新到最新
$ sudo yum update
安装一些必要的系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新 yum 缓存
sudo yum makecache fast
可以查看所有仓库中所有docker版本,并选择特定版本安装
[root@localhost ~] yum list docker-ce --showduplicates | sort -r
* updates: mirrors.tuna.tsinghua.edu.cn
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror
Installed Packages
* extras: mirrors.njupt.edu.cn
docker-ce.x86_64 3:19.03.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.2-3.el7 @docker-ce-stable
docker-ce.x86_64 3:19.03.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.0-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.7-3.el7 docker-ce-stable
......
* base: mirrors.tuna.tsinghua.edu.cn
Available Packages
安装 Docker-ce
sudo yum -y install docker-ce
------ or ------
sudo yum install docker-ce-17.12.0.ce
启动并加入开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker
重新加载docker参数
[root@docker ~] systemctl daemon-reload
验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
[root@localhost ~] docker version
Client: Docker Engine - Community
Version: 19.03.2
API version: 1.40
Go version: go1.12.8
Git commit: 6a30dfc
Built: Thu Aug 29 05:28:55 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.2
API version: 1.40 (minimum version 1.12)
Go version: go1.12.8
Git commit: 6a30dfc
Built: Thu Aug 29 05:27:34 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.6
GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc:
Version: 1.0.0-rc8
GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
docker-init:
Version: 0.18.0
GitCommit: fec3683
通过浏览器查询Docker服务端信息
info:http://xxx:2375/info
version:http://xxx:2375/version
4 镜像加速
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。
新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。
请在该配置文件中加入(没有该文件的话,请先建一个):
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
5 删除 Docker CE
执行以下命令来删除 Docker CE:
$ sudo yum remove docker-ce
$ sudo rm -rf /var/lib/docker
X 问题
X.1 已经安装过旧版本的docker
因为之前已经安装过旧版本的docker,在安装的时候报错如下:
Transaction check error:
file /usr/bin/docker from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/docker-containerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/docker-containerd-shim from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/dockerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
卸载旧版本的包
$ sudo yum erase docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
再次安装docker
$ sudo yum install docker-ce
6 创建基本Nginx镜像
2.1 搜索centos镜像
[root@localhost ~] docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5575 [OK]
ansible/centos7-ansible Ansible on Centos7 123 [OK]
jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 112 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 99 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 63
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 57 [OK]
tutum/centos Simple CentOS docker image with SSH access 45
centos/postgresql-96-centos7 PostgreSQL is an advanced Object-Relational … 39
kinogmt/centos-ssh CentOS with SSH 29 [OK]
2.2 下载官方系统centos镜像并查看
[root@localhost ~] docker pull centos
Using default tag: latest
latest: Pulling from library/centos
d8d02d457314: Pull complete
Digest: sha256:307835c385f656ec2e2fec602cf093224173c51119bbebd602c53c3653a3d6eb
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
[root@localhost ~]
[root@localhost ~] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 67fa590cfc1c 5 weeks ago 202MB
centos 7.6.1810 f1cb7c7d58b7 6 months ago 202MB
2.3 启动并进入到镜像中
[root@localhost ~] docker run -it --name mynginx centos /bin/bash
[root@637e2766790f /]
2.4 镜像定制化(进入之后的操作就跟正常在centos中操作是一样的)
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
2.5 开始安装nginx
[root@637e2766790f ~] yum install -y nginx #默认的网络连接方式是可以连接外网的
[root@637e2766790f ~] vim /etc/nginx/nginx.conf #修改参数
加上一行 daemon off;(禁止后台运行,docker不允许nginx后台运行)
[root@a8882e2ef0d9 ~] nginx -t #检查nginx配置文件语法
[root@a8882e2ef0d9 ~] nginx #启动ngin
2.6 检查结果
正常在nginx命令运行后,界面是夯住的,所以另外打开一个ssh渠道执行
[root@localhost ~] docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
637e2766790f centos "/bin/bash" 12 minutes ago Up 12 minutes mynginx
2.7 提交镜像并查看
[root@localhost ~] docker commit -m "add new nginx docker images" mynginx murry/nginx:v2
sha256:6a3a0afe8f25bbe22cde37a9f3db4e7c8572504a6e06ef10648d179c6f318234
[root@localhost ~]
[root@localhost ~] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
murry/nginx v2 6a3a0afe8f25 3 seconds ago 593MB
2.8 测试nginx
运行自己的镜像
docker run -it -d --name webserver_v2 -p 9000:80 murry/nginx:v2 nginx
浏览器访问服务器IP地址:http://192.168.50.70:9000/
2.9 进入到容器内部
docker exec -it webserver_v2 bash
2.10 关于日志输出问题
采用挂载目录的方式
宿主机上创建目录
mkdir -p /docker_log/webserver_v2
将目录挂载到镜像中
docker run -it -d --name webserver_v2 -v /docker_log/webserver_v2:/nginx_log/ -p 9000:80 murry/nginx:v2 nginx
修改镜像中Nginx配置中的日志路径
登录镜像
docker exec -it webserver_v2 bash
修改nginx配置
vim /etc/nginx/nginx.conf
重新加载Nginx配置
nginx -s reload
查看宿主机上的目录
[root@localhost ~] ll /docker_log/webserver_v2
total 4 日志文件已经正常创建和写入了
-rw-r--r--. 1 root root 1400 Sep 25 22:23 access.log
-rw-r--r--. 1 root root 0 Sep 25 22:23 error.log