一、安装 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
© 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

发表评论