爱生活,爱分享


docker-01 在centos-7上安装docker及优化设置

haiten 2019-09-13 1476浏览 0条评论
首页/正文
分享到: / / / /

一、安装 docker

1、系统环境检查检查

Docker 要求运行在 CentOS 7 上,要求系统为 64 位,系统内核版本 3.10 以上。

uname -r
--------------------------------------------------
3.10.0-957.el7.x86_64
--------------------------------------------------

2、前置条件准备

使用 sudo 或 root 权限的用户登录:

su - root

如果安装过旧版本则先卸载旧版本,否则跳过:

yum remove docker \
    docker-common \
    docker-selinux \
    docker-engine

安装需要的软件包:

# yum-util 提供 yum-config-manager 功能
# 另外两个是devicemapper驱动依赖的
yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2

# 设置 yum 源
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/repo/Centos-7.repo

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3、安装 docker

# 以下两种安装情况根据自己的需要选择其中一种即可:

# (1) 安装最新版本
yum install -y docker-ce

# (2) 安装指定版本
# 查询版本列表
yum list docker-ce --showduplicates | sort -r
--------------------------------------------------
 * updates: mirrors.aliyun.com
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror
 * extras: mirrors.aliyun.com
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
...
--------------------------------------------------

# 指定版本安装(这里的例子是安装上面列表中的第一个)
yum install -y docker-ce-3:19.03.2

4、启动 docker 和验证安装结果

# 启动 docker
systemctl start docker.service

# 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
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 设置优化

1、使用国内镜像

nano /etc/docker/daemon.json
--------------------------------------------------
{ 
    "registry-mirrors": ["https://registry.docker-cn.com", "http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"] 
}
--------------------------------------------------
systemctl restart docker.service

2、修改默认存储位置

# 查看存储位置
docker info | grep Dir
--------------------------------------------------
 Docker Root Dir: /var/lib/docker
--------------------------------------------------

# 关闭 docker 服务
systemctl stop docker.service

# 移动数据到新的目录
mv /var/lib/docker /data/docker

# 修改 docker.service 文件,使用 --graph 参数指定存储位置
nano /usr/lib/systemd/system/docker.service
--------------------------------------------------
ExecStart=/usr/bin/dockerd 【在该行补充后续参数】 --graph /data/docker 
--------------------------------------------------

# reload配置文件
systemctl daemon-reload

# 重新启动 docker 服务
systemctl start docker.service

# 查看修改后的结果
docker info | grep Dir

3、代理设置

# 1、创建目录
mkdir -p /etc/systemd/system/docker.service.d

# 2、如果使用 HTTP 代理服务器,则:
nano /etc/systemd/system/docker.service.d/http-proxy.conf
--------------------------------------------------
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"

# 配置不代理的地址时,可以通过 NO_PROXY 环境变量指定它们:
[Service]    
Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"
--------------------------------------------------

# 3、如果使用 HTTPS 代理服务器,则:
nano /etc/systemd/system/docker.service.d/https-proxy.conf
--------------------------------------------------
[Service]
Environment="HTTPS_PROXY=https://proxy.example.com:443/"

# 配置不代理的地址时,可以通过 NO_PROXY 环境变量指定它们:
[Service]    
Environment="HTTPS_PROXY=https://proxy.example.com:443/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"
--------------------------------------------------

# 4、使代理设置生效
systemctl daemon-reload
systemctl restart docker
systemctl show --property=Environment docker

4、自启动设置

(1) docker 的自启动
systemctl enable docker

(2) docker容器的自启动
# 在容器退出或断电开机后,docker 可以通过在容器创建时的 --restart 参数来指定重启策略:
docker run --restart always --name mynginx -d nginx

# 如果容器已经被创建,我们想要修改容器的重启策略
docker update --restart no mynginx
参数 作用
no 不自动重启容器. (默认值)
on-failure 容器发生error而退出(容器退出状态不为0)重启容器,可以指定重启的最大次数,如:on-failure:10
unless-stopped 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
always 在容器已经stop掉或Docker stoped/restarted的时候才重启容器,手动stop的不算

5、安装图形管理页面

# 安装 portainer
docker pull portainer/portainer

# 准备中文汉化包
yum install -y unzip
mkdir -p /data/portainer/data /data/portainer/public
cd /data/portainer/public
cp /home/uservdc/Portainer-CN.zip Portainer-CN.zip
unzip Portainer-CN.zip && rm -rf Portainer-CN.zip

# 开放防火墙
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --reload
firewall-cmd --list-all
netstat -ntlp

# 运行 portainer
docker run -d  \
--name portainer \
--restart always \
-p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /data/portainer/data:/data \
-v /data/portainer/public:/public \
portainer/portainer

--------------------------------------------------
参数说明:
-d:容器在后台运行;
-p 9000:9000 :宿主机 9000 端口映射容器中的 9000 端口;
-v /var/run/docker.sock:/var/run/docker.sock :把宿主机的 Docker 守护进程(Docker daemon)默认监听的 Unix 域套接字挂载到容器中;
-v portainer_data:/data :把宿主机 portainer_data 数据卷挂载到容器 /data 目录;
--------------------------------------------------

# 网络放通
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --reload
firewall-cmd --list-all
netstat -ntlp
# 访问方式:http://IP:9000 ,首次登录需要注册用户,给用户 admin 设置密码;

# 当需要将其它新增服务器节点也纳入该集群进行管理时,则在新增服务器节点上:
nano /usr/lib/systemd/system/docker.service
--------------------------------------------------
ExecStart=/usr/bin/dockerd 【在该行补充后续参数】 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
--------------------------------------------------
systemctl daemon-reload
systemctl restart docker.service
firewall-cmd --permanent --add-port=2375/tcp
firewall-cmd --reload
netstat -ntlp
# 然后,到已有的 portainer.io 的管理页面的 SETTINGS -> Endpoints 页面处新增节点,Endpoint URL 为 【具体新增节点ip:2375】。

6、防火墙设置

防火墙常用操作命令(建议开启防火墙,便于禁用安全扫描时需要禁用的端口):
----------------------------------------------------------------------------------
systemctl stop firewalld.service
systemctl start firewalld.service

systemctl disable firewalld.service
systemctl enable firewalld.service

firewall-cmd --state
firewall-cmd --list-all

firewall-cmd --query-port=9000/tcp
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --remove-port=9000/tcp
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.21.75" port protocol="tcp" port="2375" accept"
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.21.75" port protocol="tcp" port="2375" accept"
firewall-cmd --reload
----------------------------------------------------------------------------------

# 添加网段
firewall-cmd --permanent --zone="public" --add-rich-rule="rule family="ipv4" source address="10.30.125.0/24" drop"

三、docker 常用命令

1、应用相关

命令 作用
yum install -y docker-ce 下载最新版的docke
service docker start 启动Docker服务
service docker stop 停止Docker服务
service docker restart 重新启动Docker服务
docker version 查看Docker的版本号

2、镜像相关

命令 作用
docker images 查询所有镜像文件
docker inspect 镜像地址:版本 查看镜像文件细节信息
docker pull 镜像地址:版本 从镜像仓库中下载
docker build -t 镜像名称:版本号 根据 dockerfile 来创建镜像文件
docker tag 旧镜像名称:版本号 nginx:latest 修改镜像的名称和版本号
docker rmi 镜像Id号 根据Id号删除镜像文件
docker rmi -f 镜像Id号 强制删除镜像文件,删除镜像前需要先关闭容器
docker save 镜像Id号 > tarFile.tar 根据镜像id导出镜像
docker save -o tarFile.tar 镜像名称:版本号 根据镜像名称导出镜像
docker load -i tarFile.tar 指定jar包导入镜像文件

3、容器相关

命令 作用
docker run -d --name 容器名(自定) 镜像id号 根据镜像id启动容器
docker run -d --name 容器名 镜像名:版本号 根据镜像名称启动容器
docker run -d -p 虚拟机端口:镜像端口 --name 容器名 镜像名:版本号 启动容器,并指定暴露端口
docker ps 查看活动的docker容器进程
docker ps -a 查看全部的容器
docker exec -it 容器id bash 进入指定的容器
docker commit 容器Id号 镜像地址:版本 将容器保存为一个新的镜像
docker start 容器Id号 启动创建好的容器
docker stop 容器Id号 停止指定容器
docker rm 容器Id 删除指定的容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq) 关闭和删除所有的容器
docker export -o tarFile.tar 容器名 将容器作为一个镜像导入到文件
docker import tarFile.tar 镜像名称:版本号 将通过 export 生成的镜像文件导入生成镜像

4、其它

--privileged=true

表示在运行容器的时候,给容器加特权,不然容器没有写文件的权限,会导致安装失败。

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

在容器内执行,解决Docker容器的时间和宿主时间不一致的问题。

最后修改:2019-09-13 10:42:38 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

说点什么吧~

评论列表

还没有人评论哦~赶快抢占沙发吧~