一. 安装配置
1.1安装配置》CentOS7
清除旧版本
$ sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
######设置仓库
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$
######设置yum源是国内的
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
######安装docker
$ sudo yum install docker-ce docker-ce-cli containerd.io
######检查版本
$ docker version
$ sudo systemctl start docker
$
$ sudo docker run hello-world
# 开机启动
$ systemctl enable docker
- 修改镜像(指修改国外源的意思,而不是 Docker 里的镜像 )
$ vi /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com"
],
"insecure-registries":[
"http://docker私服地址"
]
}
$ sudo systemctl restart docker
#验证是否修改成功
$ sudo docker info
## ......
Registry Mirrors:
https://registry.docker-cn.com/
## ......
1.2 删除》CentOS7
yum -y remove containerd.io.x86_64;yum -y remove docker-ce.x86_64;yum -y remove docker-ce-cli.x86_64;
rm -rf /usr/bin/docker/;
rm -rf /etc/docker/;
rm -rf /var/lib/docker/;
二. 常用命令
2.1 命令》镜像相关
# 查看镜像
$ docker images
# 查看镜像详细信息
$ docker inspect showdoc
# 删除镜像
$ docker rmi showdoc
2.2 命令》容器相关
# 创建容器
$ docker create nginx:1.12
# 创建容器并命名
$ docker create --name nginx nginx:1.12
# 启动容器
$ docker start nginx
# 运行容器(创建+启动),-d作用为后台运行
$ docker run --name nginx -d nginx:1.12
# 查看运行中的容器
$ docker ps
# 查看所有容器
$ docker ps -a
# 停止容器
$ docker stop nginx
# 删除容器
$ docker rm nginx
# 进入容器执行命令,其中 -i ( --interactive ) 表示保持我们的输入流,只有使用它才能保证控制台程序能够正确识别我们的命令。而 -t ( --tty ) 表示启用一个伪终端,形成我们与 bash 的交互,如果没有它,我们无法看到 bash 内部的执行结果。
$ docker exec -it nginx bash
$ exit //退出
# 衔接到容器(容器中的主程序转为“前台”运行),我们可以通过 Ctrl + C 来向程序发送停止信号,让程序停止 ( 从而容器也会随之停止 ),用处不大
$ docker attach nginx
# 从容器向宿主机拷贝文件
$ sudo docker cp 3a55922b214b:/etc/mysql/mysql.cnf /home/elink/
# 查看容器日志
$ docker logs -f -t --tail 100 nginx:1.12
$ docker logs --tail 100 tml-hes
$ docker logs epark-samba
# 查询内存及CPU占用率
$ docker stats
2.3 命令》docker-compose
# 启动项目 -d:后台运行
$ sudo docker-compose up -d
# 删除项目
$ sudo docker-compose down
三. nexus私服
3.1 nexus私服》配置nexus
- 登录nexus,默认账户密码:admin admin123
- 界面上部齿轮形状的图标 》》 左侧Repositories 》》 Create repository 》》 docker(hosted)
- hosted: 本地存储,即同 docker 官方仓库一样提供本地私服功能
- proxy: 提供代理其他仓库的类型,如 docker 中央仓库
- group: 组类型,实质作用是组合多个仓库为一个地址
- 填写私服名称 》》 勾选Create an HTTP connect…,配置端口号:5000 》》 勾选Enable Docker V1 Api 》》 Create Repository
3.2 nexus私服》配置docker
$ vi /etc/docker/daemon.json
# 填入
{ "insecure-registries":["http://docker私服地址"] }
$ sudo systemctl restart docker
# 验证是否修改成功
$ sudo docker info
$ sudo docker login -u admin -p admin123 docker私服地址
# 推送镜像
$ sudo docker tag mysql docker私服地址/mysql
$ sudo docker push docker私服地址/mysql:5.7
# 拉取镜像
$ sudo docker pull docker私服地址/nginx:1.16.0
# 搜索镜像
$ sudo docker search docker私服地址/nginx
四. docker-compose
4.1 docker-compose》安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
sudo docker-compose version
docker-compose.yml应该和自己的应用在同一个目录下

4.2 docker-compose》文件介绍
version: "3.7" # docker-compose的版本号
# 配置网络,网络之间是相互隔离的
networks:
water-gas-pre:
name: water-gas-pre
driver: bridge
# 配置服务
services:
# 配置pg数据库,如果没有会自动创建
postgres:
image: postgres:10
container_name: water-gas-postgres10-pre # 容器名,自己起
restart: always # 开机自启
ports:
- 5433:5432 # 宿主机端口:容器端口,注意如果同一个容器当中调用容器端口即可,多个项目注意宿主机端口不能一样
volumes:
# 数据卷:宿主机上的data目录(/home/techen/water-gas-pre/postgresql/data),映射到容器内部的data(/var/lib/postgresql/data)目录
- /home/techen/water-gas-pre/postgresql/data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=QAZqaz01
- TZ=Asia/Shanghai
networks:
water-gas-pre:
aliases:
- water-gas-postgres10-pre
mongo:
image: mongo:4.4.6
container_name: water-gas-mongo-pre
restart: always
ports:
- 27019:27017
volumes:
- /home/techen/water-gas-pre/mongodb/data:/data/db
- /home/techen/water-gas-pre/mongodb/logs:/var/log/mongodb
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=QAZqaz01
- TZ=Asia/Shanghai
command: ["--logpath", "/var/log/mongodb/mongodb.log"]
networks:
water-gas-pre:
aliases:
- water-gas-mongo-pre
redis:
image: redis:5.0.10
container_name: water-gas-redis5-pre
restart: always
ports:
- 6380:6379
volumes:
- /home/techen/water-gas-pre/redis/redis.conf:/etc/redis/redis.conf
- /home/techen/water-gas-pre/redis/data:/data
environment:
- TZ=Asia/Shanghai
command: ["redis-server", "/etc/redis/redis.conf"]
networks:
water-gas-pre:
aliases:
- water-gas-redis5-pre
rabbitmq:
image: rabbitmq:3.8.3-management
container_name: water-gas-rabbitmq-pre
restart: always
ports:
- 15675:15672
- 5675:5672
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: QAZqaz01
RABBITMQ_LOGS:
volumes:
- /home/techen/water-gas-pre/rabbitmq/data:/var/lib/rabbitmq
# 启动前宿主机赋予/home/techen/water-gas/rabbitmq/logs访问权限
- /home/techen/water-gas-pre/rabbitmq/logs:/var/log/rabbitmq
networks:
water-gas-pre:
aliases:
- water-gas-rabbitmq-pre
ami-water-gas:
image: java-app
container_name: ami-water-gas-pre
restart: always
ports:
- 8013:8012
depends_on:
- postgres
- redis
volumes:
- /home/techen/water-gas-pre/ami-water-gas/ami-water-gas.jar:/home/project/ami-water-gas.jar:ro
- /home/techen/water-gas-pre/ami-water-gas/logs:/root/logs/ami-water-gas
entrypoint: "java -jar /home/project/ami-water-gas.jar FC11DAEDFB52BB1A336674CB61850974 --spring.profiles.active=pre"
environment:
- FILE_NAME=ami-water-gas
- EXPOSE_PORT=8012
- ACTIVE_ENV=pre
networks:
water-gas-pre:
aliases:
- ami-water-gas-pre
tml-hes:
image: java-app
container_name: tml-hes-pre # 容器名称
restart: always
ports:
- 9098:9099
depends_on:
- redis
volumes:
# 宿主机的tml-hes.jar挂载到容器上去,使容器当中也有tml-hes.jar包
- /home/techen/water-gas-pre/tml-hes/tml-hes.jar:/home/project/tml-hes.jar:ro
# 实现宿主机和容器之间的目录共享,使容器当中的日志目录映射到宿主机上面(注意输出日志文件路径是/root/logs/tml-hes)
- /home/techen/water-gas-pre/tml-hes/logs:/root/logs/tml-hes
entrypoint: "java -jar /home/project/tml-hes.jar --spring.profiles.active=pre"
environment:
- FILE_NAME=tml-hes
- EXPOSE_PORT=9099
- ACTIVE_ENV=pre
networks:
water-gas-pre:
aliases:
- tml-hes-pre
nb-hes:
image: java-app
container_name: nb-hes-pre
restart: always
ports:
- 9092:9091
volumes:
- /home/techen/water-gas-pre/nb-hes/nb-hes.jar:/home/project/nb-hes.jar:ro
- /home/techen/water-gas-pre/nb-hes/logs:/root/logs/nb-hes
entrypoint: "java -jar /home/project/nb-hes.jar --spring.profiles.active=pre"
environment:
- FILE_NAME=nb-hes
- EXPOSE_PORT=9091
- ACTIVE_ENV=pre
networks:
water-gas-pre:
aliases:
- nb-hes-pre
4.3 基本概念
1、数据卷
数据卷的主要作用是数据共享,最常见的用法是将宿主机的某个目录或者文件挂载到容器当中,从而实现宿主机和容器之间的数据共享
2、ACTIVE_ENV
激活环境是哪个
docker-compose》启动顺序解决方案wait-for.sh
- 服务启动先后顺序支持脚本
- git地址:https://github.com/Eficode/wait-for