介绍
Docker是一个开源的容器化平台,它让你能把应用程序及其所有依赖(代码、运行环境、配置)打包成一个“标准集装箱”,从而在任何装有Docker的服务器上无缝运行
解决什么实际问题
- 环境不一致
- 微服务架构
- 快速部署
官网
CentOS安装
yum install docker
调整国内镜像源,编辑/etc/docker/daemon.json
{
"registry-mirrors": ["https://32xw0apq.mirror.aliyuncs.com"]
}
ubuntu安装
# 1. 更新软件包索引
sudo apt update
# 2. 安装 Docker(Ubuntu 官方维护的版本)
sudo apt install -y docker.io
# 3. 将用户加入 docker 组(避免 sudo)
sudo usermod -aG docker $USER
newgrp docker # 或重新登录终端
# 4. 验证安装
docker --version
sudo systemctl start docker
sudo docker run hello-world
镜像下载地址
查看镜像:docker images
安装 docker-compose 插件
# 1. 安装 docker-compose-plugin
apt update
apt install docker-compose-plugin -y
# 2. 验证安装
docker compose version
# 3. 使用命令(注意是空格,不是横杠)
docker compose up -d
容器操作
# 镜像查看
docker images
# 停止
docker stop id
# 查看所有容器(已停止)
docker ps -as
# 启动
docker start id
# 删除
docker rm -f name
检查容器是否正常运行
docker-compose ps
清理孤儿容器
docker-compose down --remove-orphans
配置加速
创建 Docker 配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
EOF
重启 Docker
sudo systemctl restart docker
测试
sudo docker run hello-world
MySQL安装
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
注意:实际生产环境不建议使用默认端口
使用docker ps看已安装镜像
Redis安装
docker pull redis
docker run --name redis -p 6379:6379 -d redis --requirepass 123456
注意:实际生产环境不建议使用默认端口
Mongo安装
docker run --name mongo -p 27017:27017 -d mongo --auth
设置密码
# 进入容器,打开mongo,admin身份进入
docker exec -it mongo mongo admin
# 授权
db.createUser({user:'admin',pwd:'123456',roles:[{role:'userAdminAnyDatabase',db:'admin'}]});
Nacos服务端安装
docker run --name nacos-quick -e MODE=standalone -p 8849:8848 -d nacos/nacos-server:2.0.2
访问ip:端口/nacos
Sentinel-Dashboard
Yapi
启动一个mongo
docker run -d --name mongo-yapi mongo
初始化 Yapi 数据库索引及管理员账号
docker run -it --rm \
--link mongo-yapi:mongo \
--entrypoint npm \
--workdir /api/vendors \
registry.cn-hangzhou.aliyuncs.com/anoy/yapi \
run install-server
启动 Yapi 服务
docker run -d \
--name yapi \
--link mongo-yapi:mongo \
--workdir /api/vendors \
-p 3000:3000 \
registry.cn-hangzhou.aliyuncs.com/anoy/yapi \
server/app.js
访问http://localhost:3000,登录账号admin@admin.com,密码ymfe.org
arch配置代理
/etc/docker/daemon.json
{
"proxies": {
"http-proxy": "http://127.0.0.1:7890",
"https-proxy": "http://127.0.0.1:7890"
}
}
打包迁移到其他服务器
在源服务器上保存所有CompreFace相关的Docker镜像
sudo docker save -o compreface-fe.tar exadel/compreface-fe:1.2.0
sudo docker save -o compreface-admin.tar exadel/compreface-admin:1.2.0
sudo docker save -o compreface-api.tar exadel/compreface-api:1.2.0
sudo docker save -o compreface-postgres-db.tar exadel/compreface-postgres-db:1.2.0
sudo docker save -o compreface-core.tar exadel/compreface-core:1.2.0
将生成的.tar文件传输到目标服务器
scp compreface-*.tar user@new-server:/path/to/destination/
在目标服务器上加载这些Docker镜像
sudo docker load -i compreface-fe.tar
sudo docker load -i compreface-admin.tar
sudo docker load -i compreface-api.tar
sudo docker load -i compreface-postgres-db.tar
sudo docker load -i compreface-core.tar
在新服务器上
docker run
或
sudo docker-compose up -d
docker-compose.yml
version: '3'
services:
compreface-postgres-db:
image: exadel/compreface-postgres-db:1.2.0
container_name: compreface-postgres-db
ports:
- "5432:5432"
compreface-core:
image: exadel/compreface-core:1.2.0
container_name: compreface-core
depends_on:
- compreface-postgres-db
ports:
- "3000:3000"
compreface-api:
image: exadel/compreface-api:1.2.0
container_name: compreface-api
depends_on:
- compreface-core
environment:
- API_JAVA_OPTS=-Xmx2g
compreface-admin:
image: exadel/compreface-admin:1.2.0
container_name: compreface-admin
depends_on:
- compreface-core
environment:
- ADMIN_JAVA_OPTS=-Xmx1g
compreface-ui:
image: exadel/compreface-fe:1.2.0
container_name: compreface-ui
ports:
- "8000:80"
depends_on:
- compreface-api
- compreface-admin
MySQL
docker run -d \
--name mysql-8.4 \
--restart=always \
-p 3306:3306 \
-v /app/mysql8.4/data:/var/lib/mysql \
-v /app/mysql8.4/conf:/etc/mysql/conf.d \
-v /app/mysql8.4/logs:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.4.10 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
# 进入 MySQL
docker exec -it mysql-8.4 mysql -uroot -p
# 创建远程访问用户
CREATE USER 'appuser'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'appuser'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;