0.安装Docker
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。
Docker CE 分为 stable
test
和 nightly
三个更新频道。
官方网站上有各种环境下的 安装指南,这里主要介绍 Docker CE 在 CentOS上的安装。
1.CentOS安装Docker
Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。
1.1.卸载(可选)
如果之前安装过旧版本的Docker,可以使用下面命令卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
1.2.安装docker
首先需要大家虚拟机联网,安装yum工具
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
然后更新本地镜像源:
# 设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
然后输入命令:
yum install -y docker-ce
docker-ce为社区免费版本。稍等片刻,docker即可安装成功。
1.3.启动docker
Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!
启动docker前,一定要关闭防火墙后!!
启动docker前,一定要关闭防火墙后!!
启动docker前,一定要关闭防火墙后!!
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
通过命令启动docker:
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
然后输入命令,可以查看docker版本:
docker -v
1.4.配置镜像加速
docker官方镜像仓库网速较差,我们需要设置国内镜像服务:
参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
2.CentOS7安装DockerCompose
2.1.下载
Linux下需要通过命令下载:
# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
如果下载速度较慢,或者下载失败,可以使用课前资料提供的docker-compose文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZMs9sa6n-1691918241094)(assets/image-20210417133020614.png)]
上传到/usr/local/bin/
目录也可以。
2.2.修改文件权限
修改文件权限:
# 修改权限
chmod +x /usr/local/bin/docker-compose
2.3.Base自动补全命令:
# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
如果这里出现错误,需要修改自己的hosts文件:
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
3. 允许远程连接
3.1 修改配置文件
找到 Service节点,修改ExecStart属性,增加 -H tcp://0.0.0.0:2375
vim /usr/lib/systemd/system/docker.service
3.2 重新加载配置
systemctl daemon-reload
systemctl restart docker
尝试访问
刷新配置后,可以通过IP:端口号访问,如:127.0.0.1:2375。
但是前提是你防火墙开放了这个端口,不然是访问不了的。
我这里使用的是云服务器,就不开放端口了,没有密码暴露端口很危险。
端口放行
此段是对上文开放端口的补充。
虚拟机Linux可以使用如下命令开放端口。
firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload
云服务器,如:阿里云、腾讯云,请前往安全组放行端口。
3.3 配置安全(密钥)访问
这是一次在阿里云上未配置密钥访问,被攻击的场景。生产环境一定要设置密钥访问,不然就GG!!!血淋淋的教训。
官方文档已经提供了基于CA证书的加密方法:Docker Doc。
3.3.1 一键创建证书脚本
我们必须设置服务器的ip地址,其它的选填或者默认即可。
vim /root/docker/autogen.sh
#!/bin/bash
# -------------------------------------------------------------
# 自动创建 Docker TLS 证书
# -------------------------------------------------------------
# config
# --[BEGIN]------------------------------
# 代码,可以随便写
CODE="WRETCHANT"
# 服务器的外网IP
IP="47.99.138.xxx"
# CA证书的密码
PASSWORD="CAPWDXXX"
# 国家
COUNTRY="CN"
# 地区
STATE="guangdong"
# 城市
CITY="guangzhou"
# 组织
ORGANIZATION="WRETCHANT.EDU"
ORGANIZATIONAL_UNIT="Dev"
COMMON_NAME="$IP"
# 邮件地址
EMAIL="xxx@gmail.com"
# --[END]--
# 创建存放脚本的文件夹
mkdir -p /etc/docker/cert.init/
cd /etc/docker/cert.init/
# Generate CA key
openssl genrsa -aes256 -passout "pass:$PASSWORD" -out "ca-key.pem" 4096
# Generate CA
openssl req -new -x509 -days 365 -key "ca-key.pem" -sha256 -out "ca.pem" -passin "pass:$PASSWORD" -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL"
# Generate Server key
openssl genrsa -out "server-key.pem" 4096
# Generate Server Certs.
openssl req -subj "/CN=$COMMON_NAME" -sha256 -new -key "server-key.pem" -out server.csr
echo "subjectAltName = IP:$IP,IP:127.0.0.1" >> extfile.cnf
echo "extendedKeyUsage = serverAuth" >> extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "server-cert.pem" -extfile extfile.cnf
# Generate Client Certs.
rm -f extfile.cnf
openssl genrsa -out "key.pem" 4096
openssl req -subj '/CN=client' -new -key "key.pem" -out client.csr
echo extendedKeyUsage = clientAuth >> extfile.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "cert.pem" -extfile extfile.cnf
rm -vf client.csr server.csr
chmod -v 0400 "ca-key.pem" "key.pem" "server-key.pem"
chmod -v 0444 "ca.pem" "server-cert.pem" "cert.pem"
# 打包客户端证书成tar.gz包
mkdir -p "tls-client-certs"
cp -f "ca.pem" "cert.pem" "key.pem" "tls-client-certs/"
cd "tls-client-certs"
tar zcf "tls-client-certs.tar.gz" *
mv "tls-client-certs.tar.gz" ../
cd ..
rm -rf "tls-client-certs"
# 拷贝服务端证书,保存在docker目录下
mkdir -p /etc/docker
cp "ca.pem" "server-cert.pem" "server-key.pem" /etc/docker
执行权限
chmod +x /root/docker/autogen.sh
生成证书
bash /root/docker/autogen.sh
3.3.2 Docker指定证书文件
老样子:
vim /usr/lib/systemd/system/docker.service
找到ExecStart = 开头的一行代码,将其替换为如下内容:
ExecStart=/usr/bin/dockerd \
--tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem \
-H fd:// -H tcp://0.0.0.0:2375
刷新Docker
systemctl daemon-reload && systemctl restart docker
测试连接方法
服务器本机测试:
curl https://47.99.138.xxx:2375/info --cert /etc/docker/cert.init/cert.pem --key /etc/docker/cert.init/key.pem --cacert /etc/docker/cert.init/ca.pem
2375是你开放的端口,灵活修改!
3.4 Idea远程连接Docker
3.4.1 下载客户端的证书
scp -r root@47.99.138.251:/etc/docker/cert.init/tls-client-certs.tar.gz ./client_ca/tls-client-certs.tar.gz
我们把压缩包解压到任意文件夹,即可。
指定远程docker服务器的ip和端口,客户端证书所在的文件夹地址。