# Docker
# 简介
ce 社区版 免费 ee 企业版 收费
LTS 长期支持版 至少5年
meteor777 https://6ac535dk.mirror.aliyuncs.com yihe https://7c00aihk.mirror.aliyuncs.com
# centos7安装docker
#安装yum-utils等工具
yum install -y yum-utils device-mapper-persistent-data lvm2
#添加阿里云镜像仓库的yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum(--disablerepo 忽略)
yum makecache
yum makecache --disablerepo=etcd
或
dnf makecache
#查看docker的可用版本
yum list docker-ce.x86_64 --showduplicates | sort -r
#指定版本安装
yum install -y docker-ce-版本号
yum install -y docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io
或
#默认安装
yum install -y docker-ce
#查看状态
systemctl status docker
#启动docker
systemctl start docker
#设置docker开机启动
systemctl enable docker
#自启动
chkconfig docker on 或 systemctl enable docker.service
# 查看版本
docker -v
#配置cgroup(解决k8s加入集群问题)
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
#重启docker
systemctl restart docker
#安装docker-compose
yum -y install docker-compose
# 卸载docker
#卸载
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# ubuntu安装docker



通过APT或脚本安装
# 脚本安装
#下载
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun
#查看版本
docker version
# APT安装
# 更新软件源
sudo apt-get update
# 安装所需依赖
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# 安装 GPG 证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 新增软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 再次更新软件源
sudo apt-get -y update
# 安装 Docker CE 版
sudo apt-get -y install docker-ce
# 镜像加速器
#将https://registry.docker-cn.com修改为自己的阿里云地址(https://7c00aihk.mirror.aliyuncs.com),在阿里云->容器镜像服务
vim /etc/docker/daemon.json
:set paste
{
"registry-mirrors": [
"https://registry.docker-cn.com"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}
#重启docker
systemctl restart docker
#查看配置是否成功
docker info

# 测试docker
#测试
docker pull tomcat
#查看镜像
docker images
#如果想下载别的版本,latest可以到hub.docker.com看对应的版本
docker pull tomcat:9-jre8
#启动tomcat
docker run –p 8080:8080 tomcat
访问http://192.168.140.132:8080
# 4获取镜像
创建 Ubuntu Server X64 Docker Deploy,基于Ubuntu Server X64 Docker
#下载ubuntu
docker pull ubuntu:16.04
#进入docker上安装的ubuntu
docker run -it --rm \
ubuntu:16.04 \
bash
以交互的形式获取镜像,运行bash Ubuntu16.04的脚本,关闭时删除
# 5查看镜像
docker image ls
虚悬镜像
<none>
docker pull 或 build时,如果和上次版本相同则会出现虚悬镜像
#删除虚悬镜像
docker image prune

# Docker 部署数据库
参考 系统搭建.md(## 安装mysql)
例子:mysql容器内修改配置
#先用默认配置启动容器
docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.42
#进入容器
docker exec -it mysql bash
#修改mysql初始接收文件大小
cd /etc/mysql/conf.d
max_allowed_packet=128
cat mysqldump.cnf
# Docker Compose安装
基于Ubuntu Server X64 Docker创建Ubuntu Server X64 Docker Compose
#查看最新版本 https://github.com/docker/compose/releases
#安装sudo
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
cd /usr/local/bin/
#查看权限,默认只有可读可写权限
ls -al
#修改权限
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose version
#删除Docker Compose命令
sudo rm /usr/local/bin/docker-compose
# 测试docker-compose
cd /usr/local/docker/tomcat
#创建脚本
vim docker-compose.yml
version: '3'
services:
tomcat:
restart: always
image: tomcat
container_name: tomcat
ports:
- "8080:8080"
#启动
docker-compose up
# 容器数据持久化
在/usr/local/docker/tomcat/ROOT文件夹下创建index.html,写入hello Docker
mkdir ROOT
cd ROOT
vi index.html
执行命令实现持久化
docker run -p 8080:8080 --name tomcat -d -v /usr/local/docker/tomcat/ROOT:/usr/local/tomcat/webapps/ROOT tomcat
以交互的方式进入容器
docker exec -it tomcat bash

# 部署项目到容器
将项目拷贝到/ROOT
cd /usr/local/docker/tomcat
cp lx-web-admin-1.0.0-SNAPSHOT.zip ROOT/
解压.zip文件
用数据卷启动
docker run -p 8080:8080 --name myshop -v /usr/local/docker/tomcat/ROOT/:/usr/local/tomcat/webapps/ROOT -d tomcat

# Docker Compose部署项目
cd /usr/local/docker/
mkdir myshop
#创建脚本
vim docker-compose.yml
version: '3'
services:
web:
restart: always
image: tomcat
container_name: web
ports:
- "8080:8080"
volumes:
- /usr/local/docker/myshop/ROOT:/usr/local/tomcat/webapps/ROOT
mysql:
restart: always
image: mysql:5.7.42
container_name: mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
- --lower_case_table_names=1
- --max_allowed_packet=128M
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
将项目拷贝到ROOT目录
守护态启动
docker-compose up -d

# 网络配置
在同一个docker-compose 可以访问,在不同的docker-compose内端口不对外暴露是不能访问的,需要创建一个公用的网络,并配置达到在容器内访问

# Docker GitLab
基于Ubuntu Server X64 Docker创建
参考 系统搭建.md(## 安装GitLab)
# Docker Nexus
基于Ubuntu Server X64 Docker创建
参考 系统搭建.md(## 安装Nexus)
# Docker Registry 私服服务端
参考 系统搭建.md(## 安装 Docker Registry)
# Docker Deploy 私服客户端
参考 系统搭建.md(## 安装 Docker Deploy)
# 定制镜像到docker私服
#以tomcat为例
cd /usr/local/docker/tomcat
#下载tomcat镜像
docker pull tomcat
#创建Dockerfile, FROM 基于镜像 RUN执行命令
vim Dockerfile
FROM tomcat
#构建镜像
docker build -t tomcat:1.0 .
#打标签
docker tag tomcat 172.17.110.248:5050/tomcat:1.0
#推送到docker私服
docker push 172.17.110.248:5050/tomcat:1.0
#启动镜像
docker run -d --name tomcat -p 8080:8080 tomcat:1.0
#查看docker私服
http://172.17.110.248:8880/home

# 构建镜像到阿里云镜像
#创建Dockerfile
vim Dockerfile
# 基于java镜像创建新镜像
FROM openjdk:8
# 将jar包添加到容器中并更名为app.jar
ADD ./dream-0.0.1-SNAPSHOT.jar /root/app.jar
# 运行jar包
ENTRYPOINT ["nohup","java","-jar","/root/app.jar","&"]
#构建镜像
docker build -t dream:1.0 .
#登录阿里云镜像仓库
docker login --username=meteor777 registry.cn-beijing.aliyuncs.com
#打标签
docker tag dream:1.0 registry.cn-beijing.aliyuncs.com/meteorplan/dream:1.0
#推送到镜像仓库
docker push registry.cn-beijing.aliyuncs.com/meteorplan/dream:1.0
#启动镜像
docker run -d --name dream -p 9093:8093 dream:1.0
#查看容器日志
docker logs -f -t --tail 1000 927bc6d83585
# Docker部署SpringMVC项目(lx-shop)
GitLab
http://172.17.110.248 用户名:root 密码:12345678
Nexus
http://172.17.110.248:8081/
Registry
http://172.17.110.248:5050/v2/ #Web访问 http://172.17.110.248:8880
# 1gitlab新建项目lx-shop
# 2jdk和maven配置
参考 系统搭建.md(## 安装jdk和maven)
# 3 在docker deploy 下载源码
cd /usr/local/docker
git clone http://172.17.110.248/root/lx-shop.git
# 4打包项目
cd /usr/local/docker/lx-shop
mvn clean install package -Dmaven.test.skip=true
#打包快照内文件到/usr/local/docker/lx-shop/image
mkdir image
cd /usr/local/docker/lx-shop/lx-web-admin/target/lx-web-admin-1.0.0-SNAPSHOT
tar -zcvf lx-shop.tar.gz .
mv lx-shop.tar.gz /usr/local/docker/lx-shop/image/
cd /usr/local/docker/lx-shop/image/
# 5创建镜像配置
vi Dockerfile
FROM tomcat
WORKDIR /usr/local/tomcat/webapps/ROOT
RUN rm -rf *
ADD lx-shop.tar.gz /usr/local/tomcat/webapps/ROOT
RUN rm -rf lx-shop.tar.gz
WORKDIR /usr/local/tomcat
# 6构建镜像并推送
#构建并打标签
docker build -t 172.17.110.248:5050/lx-shop:1.0 .
#推送到docker私服
docker push 172.17.110.248:5050/lx-shop:1.0
#查看docker私服镜像
http://172.17.110.248:8880

# 7测试
创建虚拟机Ubuntu Server X64 Docker lx-shop
配置私服客户端
#创建目录
cd /usr/local/docker/lx-shop
vi docker-compose.yml
version: '3.1'
services:
lx-shop:
restart: always
image: 172.17.110.248:5050/lx-shop:1.0
container_name: lx-shop
ports:
- "8080:8080"
#启动
docker-compose up -d
#访问
http://172.17.110.248:8080
docker exec -it c6e87fd7d615 bash

# (待更新)Docker Harbor 企业级的Registry
# Docker Registry的缺点:
- 缺少认证机制,任何人都可以随意拉取及上传镜像,安全性缺失
- 缺乏镜像清理机制,镜像可以push却不能删除,日积月累,占用空间会越来越大
- 缺乏相应的扩展机制
#barbor版本 https://github.com/goharbor/harbor/releases
cd /usr/local/docker/harbor
#下载harbor
wget https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-offline-installer-v2.11.0.tgz
#解压
tar zxvf harbor-offline-installer-v2.11.0.tgz
cp /usr/local/docker/harbor/harbor/harbor.yml.tmpl /usr/local/docker/harbor/harbor/harbor.yml
#修改配置,设置(hostname,certificate,private_key)
vim harbor.yml
#harbor证书
#更新yum
yum makecache
#安装openssl
yum install openssl
#生成私钥
openssl genrsa -out harbor.key 2048
#生成证书
openssl req -new -key harbor.key -out harbor.csr
#生成自签名证书harbor.crt(有效期365天)
openssl x509 -req -days 365 -in harbor.csr -signkey harbor.key -out harbor.crt
/usr/local/docker/harbor/harbor.crt
/usr/local/docker/harbor/harbor.key
#启动
sh harbor/install.sh
#访问
http://172.17.110.248:81
账号:admin
密码:Harbor12345



# 使用
cd /usr/local/docker/lx-shop/image
#登录harbor
docker login -u admin -p Harbor12345 https://172.17.110.248:444
#构建并打标签
docker build -t 172.17.110.248:444/lx-shop/lx-shop:8.0 .
#推送
docker push 172.17.110.248:444/lx-shop/lx-shop:8.0
#退出登录
docker logout 172.17.110.248:444
#错误 cannot validate certificate for 172.17.110.248 because it doesn't contain any IP SANs
#通过重新生成证书并包含IP地址的SANs来解决此问题
cd /usr/local/docker/harbor
#创建一个SANs配置文件san.cnf
vim san.cnf
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
CN = localhost
[v3_req]
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
IP.1 = 172.17.110.248
#使用该配置文件生成证书
openssl req -new -newkey rsa:2048 -sha256 -nodes -out harbor.csr -keyout harbor.key -config san.cnf
#自签名证书
openssl x509 -req -days 365 -in harbor.csr -signkey harbor.key -out harbor.crt -extensions v3_req -extfile san.cnf
#错误 Error response from daemon: Get "https://172.17.110.248:444/v2/": x509: certificate signed by unknown authority
# 系统无法识别签署证书导致的错误
#查看证书信息
openssl x509 -in harbor.crt -text -noout
#将证书导入到 Java 的信任存储中
keytool -import -trustcacerts -file harbor.crt -alias myrootca -keystore cacerts -storepass changeit
yes
#把harbor.crt复制到/etc/docker/certs.d
cp /usr/local/docker/harbor/harbor.crt .
#把自签名证书改名为172.17.110.248.crt
cp harbor.crt 172.17.110.248.crt
#重启docker
systemctl restart docker

# Docker部署微服务
创建服务 Ubuntu Server X64 Docker Server
基于Ubuntu Server X64 Docker创建
微服务虚拟机
创建服务 Ubuntu Server X64 Docker Server Cloud, 基于Ubuntu Server X64 Docker Deploy创建
# 1部署itoken-dependencies到nexus私服
1cd itoken-dependencies
2mvn deploy
部署私服失败,更换Springcloud版本
Finchley.RC1,Finchley.M9在中央仓库都是残缺的,使用Finchley.SR1
3登录私服查询是否上传成功

# 2部署itoken-config到nexus私服
1查看是否有ssh,没有则生成,并配置到gitlab
2cd /usr/local/docker
3 git clone ssh://git@192.168.140.137:2222/lx-itoken/itoken-config.git
4 cd itoken-config/
5 git pull
6 mvn clean package
由于获取不到nexus上的itoken-dependencies依赖,目前是将itoken-dependencies项目克隆到/usr/local/docker,
git clone ssh://git@192.168.140.137:2222/lx-itoken/itoken-dependencies.git
然后重新执行mvn clean package
7测试itoken-config是否可以正常访问
cd /usr/local/docker/itoken-config
cd target/
java -jar itoken-config-1.0.0-SNAPSHOT.jar

8修改application.yml名称为bootstrap.yml
9 cd docker/
cp ../target/itoken-config-1.0.0-SNAPSHOT.jar .
vi Dockerfile
docker pull openjdk:8-jre
docker build -t 192.168.140.137:5000/itoken-config .
docker run -p 8888:8888 192.168.140.137:5000/itoken-config
测试是否可以获取配置
http://192.168.140.134:8888/itoken-eureka/prod/master
vim docker-compose.yml
version: '3.1'
services:
itoken-config:
restart: always
image: 192.168.140.137/itoken-config
container_name: itoken-config
ports:
- "8888:8888"
#启动itoken-config
docker-compose up –d
#查看日志
docker logs -f itoken-config
# 3部署itoken-eureka到nexus私服
cd /usr/local/docker
git clone ssh://git@192.168.140.137:2222/lx-itoken/itoken-eureka.git
cd itoken-eureka/
mvn clean package
mkdir docker
cd docker/
cp ../target/itoken-eureka-1.0.0-SNAPSHOT.jar .
FROM openjdk:8-jre
RUN mkdir /app
COPY itoken-eureka-1.0.0-SNAPSHOT.jar /app/
CMD java -jar /app/itoken-eureka-1.0.0-SNAPSHOT.jar --spring.profiles.active=prod
EXPOSE 8761
docker build -t 192.168.140.137:5000/itoken-eureka .
vim docker-compose.yml
version: '3.1'
services:
itoken-eureka1:
restart: always
image: 192.168.140.137:5000/itoken-eureka
container_name: itoken-eureka1
ports:
- "8761:8761"
itoken-eureka2:
restart: always
image: 192.168.140.137:5000/itoken-eureka
container_name: itoken-eureka2
ports:
- "8861:8761"
itoken-eureka3:
restart: always
image: 192.168.140.137:5000/itoken-eureka
container_name: itoken-eureka3
ports:
- "8961:8761"
#测试eureka是否配置成功
http://192.168.140.134:8761

# 4zipkin同理
http://192.168.140.134:8861/eureka/
http://192.168.140.134:8961/eureka/
# 5GitLab Runner
# 1创建runner文件
cd /usr/local/docker/
mkdir runner
# 2创建docker-compose.yml
vim docker-compose.yml
version: '3.1'
services:
gitlab-runner:
build: environment
restart: always
container_name: gitlab-runner
privileged: true
volumes:
- ./config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
# 3创建Dockerfile
mkdir environment
cd environment/
vi Dockerfile
# 4创建加速器daemon.json
vi daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.140.137:5000"
]
}
# 5上传jdk.gz,maven.gz,get-docker.sh
# 6启动docker compose
cd /usr/local/docker/runner
docker-compose up -d
# 6注册 Runner
docker exec -it gitlab-runner gitlab-runner register

eureka项目 =》设置 =》 CI/CD =》Runner

刷新gitlab可以看到已经注册成功

config服务同理
# hub.docker镜像上传到阿里云镜像
#windows启动Docker Desktop
#打开cmd窗口
#下载镜像
docker pull nginx
#windows导出镜像到D盘
docker save -o D://flannel-cni-plugin.tar flannel/flannel-cni-plugin:v1.4.1-flannel1
docker save -o D://etcd-host.tar eipwork/etcd-host:3.4.16-2
docker save -o D://kuboard.tar eipwork/kuboard:v3
docker save -o D://jenkins.tar jenkins/jenkins:2.452.2-lts
docker save -o D://openvpn-as.tar linuxserver/openvpn-as:latest
docker save -o D://sentinel-dashboard.tar bladex/sentinel-dashboard:1.8.7
docker save -o D://jumpserver.tar jumpserver/jms_all:v3.8.1
docker save -o D://rocketmq.tar apache/rocketmq:5.2.0
docker save -o D://redis.tar redis:7.4.1-alpine
#linux导出镜像
docker save -o /root/flannel.tar flannel/flannel:v0.25.2
docker save -o /root/seata.tar seataio/seata-server
#rz上传至服务器,加载镜像
docker load -i /root/redis.tar
#查看
docker images
#登录阿里云镜像仓库
docker login --username=meteor777 registry.cn-beijing.aliyuncs.com
#打标签
docker tag apache/rocketmq:5.2.0 registry.cn-beijing.aliyuncs.com/meteorplan/apache-rocketmq:5.2.0
#推送到镜像仓库
docker push registry.cn-beijing.aliyuncs.com/meteorplan/apache-rocketmq:5.2.0
#下载镜像
docker pull registry.cn-beijing.aliyuncs.com/meteorplan/apache-rocketmq:5.2.0
# docker镜像与阿里云镜像对应表
| hub.docker镜像 | 阿里云镜像 |
|---|---|
| eipwork/etcd-host:3.4.16-2 | registry.cn-beijing.aliyuncs.com/meteorplan/etcd-host:3.4.16-2 |
| eipwork/kuboard:v3 | registry.cn-beijing.aliyuncs.com/meteorplan/eipwork-kuboard:v3 |
| jenkins/jenkins:2.452.2-lts | registry.cn-beijing.aliyuncs.com/meteorplan/jenkins-jenkins:2.452.2-lts |
| linuxserver/openvpn-as:latest | registry.cn-beijing.aliyuncs.com/meteorplan/openvpn-as:latest |
| bladex/sentinel-dashboard:1.8.7 | registry.cn-beijing.aliyuncs.com/meteorplan/bladex-sentinel-dashboard:1.8.7 |
| jumpserver/jms_all:v3.8.1 | registry.cn-beijing.aliyuncs.com/meteorplan/jumpserver-jms_all:v3.8.1 |
| apache/rocketmq:5.2.0 | registry.cn-beijing.aliyuncs.com/meteorplan/apache-rocketmq:5.2.0 |
← Docker命令