完整使用docker部署项目纪要
Docker安装部署指导书
1.Docker安装
1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
$ uname -r
2、使用 root
权限登录 Centos。确保 yum 包更新到最新。
$ sudo yum update
3、卸载旧版本(如果安装过旧版本的话)
$ sudo yum remove docker docker-common docker-selinux docker-engine
4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5、设置yum源
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
6安装Docker
$ sudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
中间两次提示 选y 然后回车
7.启动并加入开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker
8.验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
$ docker version
具体如下
[root@vm3 ~]# docker version
Client: Docker Engine - Community
Version: 20.10.14
API version: 1.41
Go version: go1.16.15
Git commit: a224086
Built: Thu Mar 24 01:49:57 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.14
API version: 1.41 (minimum version 1.12)
Go version: go1.16.15
Git commit: 87a90dc
Built: Thu Mar 24 01:48:24 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.5.11
GitCommit: 3df54a852345ae127d1fa3092b95168e4a88e2f8
runc:
Version: 1.0.3
GitCommit: v1.0.3-0-gf46b6ba
docker-init:
Version: 0.19.0
GitCommit: de40ad0
此时 Docker安装完成
1.创建网络
docker network create emdp-network
2.建立mysql 5.7容器
1.下载镜像
docker pull mysql:5.7.26
2.查询镜像
docker images|grep mysql
3.启动镜像
docker run -p 3306:3306 --name mysql5.7.26 --restart=always -v /data/mysql_data/mysql5.7.26/conf:/etc/mysql -v /data/mysql_data/mysql5.7.26/data:/var/lib/mysql -v /data/mysql_data/mysql5.7.26/logs:/logs -e MYSQL_ROOT_PASSWORD=nuctechiot123 -d mysql:5.7.26
命令说明
-
-p3306:3306 将容器的 3306 端口映射到主机的 3306 端口
-
--name mysql5.7.26 启动后容器名为 my-mysql
-
-v $PWD/conf:/etc/mysql 将主机当前目录下的 conf/ 挂载到容器的 /etc/mysql (conf目录为mysql的配置文件,不挂载也没问题)
-
-v $PWD/logs:/logs 将主机当前目录下的 logs 目录挂载到容器的 /logs (logs目录为mysql的日志目录,不挂载也没影响)
-
-v $PWD/data:/var/lib/mysql 将主机当前目录下的data目录挂载到容器的 /var/lib/mysql (data目录为mysql配置的数据文件存放路径,这个还是建议挂载,是存储数据的,容器down掉,还能再次挂载数据。)
-
-e MYSQL_ROOT_PASSWORD=123456 初始化 root 用户的密码
4.查询容器是否启动
docker ps|grep mysql
6.进入容器
docker exec -it mysql5.7.26 bash
停止容器 docker stop
删除容器 docker rm
7.对mysql进行相关配置
root@9d6394c87d19:/# mysql -uroot -p --default-character-set=utf8 # 命令连接mysql
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.26 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select host,user from user;
+-----------+---------------+
| host | user |
+-----------+---------------+
| % | root |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+---------------+
4 rows in set (0.00 sec)
# 授权
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'nuctechiot123' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit;
Bye
最后exit退出镜像
8.加入自定义网络
docker network connect emdp-network id
3.设置容器内所有镜像 随docker启动 而启动
而修改某个已经启动的容器的restart策略,可以用
docker update --restart unless-stopped redis
而修改所有已经在运行的容器的restart策略,可以用
docker update --restart unless-stopped $(docker ps -q)
4.建立redis容器
1.下载镜像
docker pull redis # 默认拉取稳定版本
2.启动镜像
docker run -p 6379:6379 -v /data/redis/data:/data --restart=always --name redis -d redis redis-server --appendonly yes --requirepass "nuctechiot123"
命令说明
命令说明:
-p:宿主机端口与容器端口映射
-v:挂载,将容器中的redis持久化数据挂载到宿主机,避免容器重启导致的数据丢失。
--restart=always:无论什么情况挂壁,总是重启
--name:容器名称
-d:使用指定的镜像(redis的4.0.8版本的镜像)在后台运行容器
--appendonly yes:redis运行时开启持久化
--requirepass "root123456":设置redis登陆密码
3.查看是否启动
docker ps
3.加入自定义网络
docker network connect emdp-network id
5.建立rabbitmq
1.下载镜像
docker pull rabbitmq:management
management标签的含义是下载的镜像包含manage模块。包含web管理页面。
2.安装
docker run -dit --name rabbitmq3.9 --restart=always -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management
参数说明
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin指定manage模块的用户名和密码
6.建立nginx容器
1.拉取镜像
docker pull nginx # 默认拉取稳定版
2.启动镜像
docker run -d --name mynginx -p 80:80
这种方式启动nginx不方便更改配置文件 ,每次更改配置文件需要进入容器内部进行更改,而且容器重启 配置失效
我们按照下面操作 将配置文件挂载在本地/data目录
在/data目录执行
mkdir -p ./nginx/{conf,html,logs} #创建挂载目录
进入/data/nginx 目录 执行一下操作
docker cp ef:/etc/nginx/nginx.conf ./
dokcer cp ef:/etc/nginx/conf.d/default.conf ./conf/
cp 命令代表复制
ef是我们nginx容器的ID,通过 docker ps 查看
/etc/nginx/nginx.conf 是容器内部nginx.conf 路径
然后stop 并且rm 删除刚才启动的nginx
docker ps nginx
docker stop id
docker rm id
最后重新创建容器
docker run -d --name nginx1.21.6 -p 80:80 -p 1102:1102 -p 1103:1103 --restart=always --network emdp-network -v /data/nginx/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/logs:/var/log/nginx -v /data/nginx/html:/usr/share/nginx/html -v /data/nginx/conf:/etc/nginx/conf.d -v /data:/data --privileged=true nginx
-v 挂载目录,格式 -v: 表示将主机目录与容器目录之间进行共享,
--privileged=true 容器内部对挂载的目录拥有读写等特权
--restart=always 每次docker 启动后 nginx镜像跟随启动
创建后 容器未启动
加入网络
docker network connect emdp-network id
最后重新启动
docker restart id
7.建立mongo容器
1.拉取镜像
docker pull mongo:3.4
2.启动
docker run -d -p 27017:27017 --network emdp-network --restart=always --name mongodb -v /data/mongo3.4/db:/data/db mongo
启动后进入容器 然后进入mongo
docker exec -it mongo /bin/bash
mongo
执行
use admin
db.createUser({user: "admin",pwd: "123456", roles: [ { role: "root", db: "admin" } ]});
退出容器exit
用刚才建立的用户登录mongo
mongo --port 27017 -u admin -p 123456 --authenticationDatabase admin
use SITS;创建数据库
db.createUser({user: "root",pwd: "123456",roles: [{ role: "readWrite", db: "SITS" }]});
安装完 mongo后需要执行create_index.py 脚本 导入表结构
8.flask_api 封装容器
1.编写Dockerfile文件
FROM centos/python-36-centos7
WORKDIR /EMDP_API_Contract/api
COPY ./EMDP_API_Contract /EMDP_API_Contract/
RUN pip install --upgrade pip
RUN pip3 install -r /EMDP_API_Contract/requirements.txt
RUN pip3 install Identicon==0.1
COPY ./swagger.py /opt/app-root/lib/python3.6/site-packages/flask_restful_swagger/
ENTRYPOINT gunicorn 'wsgi_app:load_app(conf="prod")' --worker-class eventlet -w 5 -b 0.0.0.0:5001
2.打包
docker build -t name[:tag] ./ # Dockerfile坐在目录文件
docker build -t emdp-contract-api:2.0 .
docker build -t emdp-contract-ws:1.0 .
3.启动
docker run -d -p 5001:5001 --name api --network emdp-network -v /data/projects/EMDP_API_Contract:/EMDP_API_Contract 17af6645ffa3 --restart=always
docker run -d -p 6001:6001 --name ws --network emdp-network -v /data/projects/EMDP_API_Contract:/EMDP_API_Contract 9a0295901e52 --restart=always
docker run -d -p 5001:5001 --name api --network emdp-network --restart=always 17af6645ffa3
docker run -d -p 6001:6001 --name ws --network emdp-network --restart=always 9a0295901e52
加入网络
docker network connect emdp-network id
9.EMDP_Reveiver 封装
Docker
# server
FROM centos/python-36-centos7
ADD requirements.txt /root/projects/
RUN pip3 install --upgrade pip
RUN pip3 install -r /root/projects/requirements.txt
ADD ./EMDP_Receiver /root/projects/EMDP_Receiver
ADD init.sh /root/projects/
ADD supervisord.conf /etc/
USER root
RUN mkdir -p /data/logs/supervisor
RUN mkdir -p /etc/supervisord
ADD emdp_receiver.conf /etc/supervisord
WORKDIR /root/projects/EMDP_Receiver
CMD ["/bin/bash","/root/projects/init.sh"]
建容器
sudo docker build -t emdpreceiver ./
运行
docker run -d -p 9001:9001 --network emdp-network --restart=always -v /data/logs/supervisor:/data/logs/supervisor --name emdpreveiver 1731de7c5c2a
[program:emdpreceiver_dataserver] # 数据接收服务
directory = /root/projects/EMDP_Receiver ; 程序的启动目录
command = /root/.virtualenvs/EMDP_Receiver/bin/python DataServer.py ; 启动命令
autostart = false ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = false ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = root ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
#stdout_logfile = /data/logs/supervisor/dataserver_stdout.log
10.docker image 本地保存与加载
1.保存
示例:docker save [options] images [images...]
docker save -o ./emdpreceiver.tar emdpreceiver:2.0
其中-o和>表示输出到文件,nginx.tar
为目标文件,nginx:latest
是源镜像名(name:tag)
docker save -o ./emdp_docke_image.tar emdpreceiver emdp-contract-api emdp-contract-ws rabbitmq redis nginx mongo mysql uifd/ui-for-docker centos/python-36-centos7
2.加载
示例:docker load [options]
docker load -i ./emdpreceiver.tar
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】