完整使用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信息

posted @ 2022-04-07 17:18  小辉的  阅读(9)  评论(0编辑  收藏  举报
/*小图标*/