python --docker(部署问题、无网安装)

docker和vmware对比

vmware是轻量级虚拟机,只虚拟了少量的硬件设备,虚拟实例共享使用Linux内核

python --docker(部署问题、无网安装)_第1张图片

安装docker

关闭SELINUX服务

SELINUX是CentOS系统捆绑的安全服务程序,因为安全策略太过严格,所以建议大家关闭这项服务

打开 vim /etc/selinux/config
修改 SELINUX=disabled 

reboot 重启系统

使用yum命令安装docker服务

yum install docker -y    # 安装docker服务, -y 默认安装

基本命令(启动、关闭、重启)

service docker start     # 启动docker
service docker stop      # 停止docker
service docker restart   # 重启docker 

什么是DockerHub

DockerHub是Docker公共镜像仓库,为用户提供了大量的镜像文件

https://hub.docker.com/

由于国内网络访问DockerHub很慢,无法下载镜像文件,我们可以使用Docker加速器

python --docker(部署问题、无网安装)_第2张图片

打开dockerhub 在搜索框输入python
python --docker(部署问题、无网安装)_第3张图片
配置docker加速器

DaoCloud加速器采用自主研发的智能路由及缓存技术,并引入了先进的协议层优化,极大提升拉取镜像的速度和体验

安装命令

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

科大镜像:https://docker.mirrors.ustc.edu.cn/
网易:https://hub-mirror.c.163.com/
阿里云:https://<你的ID>.mirror.aliyuncs.com
七牛云加速器:https://reg-mirror.qiniu.com

出现这个即为执行成功
python --docker(部署问题、无网安装)_第4张图片
vim /etc/docker/daemon.json 去掉结尾逗号

service docker restart 重启

Docker环境常用指令

python --docker(部署问题、无网安装)_第5张图片

python --docker(部署问题、无网安装)_第6张图片
实操:

镜像相关命令

启动docker
   
	service docker start 

下载指定版本的python镜像

	docker pull python:3.7

查看已经安装好的docker镜像

	docker images
	
查看已经安装的docker镜像中的详细信息

	docker inspect python:3.7

把已安装的镜像保存为压缩文件

	docker save python:3.7 > /root/python.tar

删除掉已经存在的docker镜像(该镜像必须未绑定容器)

	docker rmi python:3.7

从压缩包安装py镜像(适用无网环境)

	docker load < /root/python.tar

容器相关命令

查看正在运行的docker容器

	docker ps
	docker ps -a



创建容器

	docker run -it --name=p1 python:3.7 bash
		-it: 创建后立即执行
		--name: 容器名称(随意起名)
		python:3.7  根据那个镜像创建容器;
		bash 创建后要执行什么;
		-d 参数可以让容器默认后台运行,后面用exec命令进去容器




启动、停止、暂停容器

	docker start p1   启动
	docker stop p1   停止
	docker pause p1  暂停
	docker unpause p1 恢复



进入正在运行的容器中

	docker exec -it p1 bash   # 该容器必须是运行状态
	docker attach 容器id



退出容器

	exit  注: 如果是run命令进去exit后则容器停止,如果是exec命令进入则容器运行状态不变




查看容器详细信息
	
	docker inspect p1



删除容器

	docker rm p1  # 该容器必须是停止状态

容器网络环境

docker 网络环境
默认情况下,docker环境会给容器分配动态的IP地址,这就导致下次启动容器的时候IP地址就改变了

我们可以单独创建一个docker内部的网段,(默认是172.17.0.x),为了方便区分,所以用网段区分一下

创建固定网段

docker network create --subnet=172.18.0.0/16 mynet
16: 分配的ip最大值
mynet: 网段名

删除网段

docker network rm mynet   # 必须把该容器删掉

创建容器并分配固定ip

docker run -it --name=p1 --net mynet --ip 172.18.0.2 python:3.7 bash

查看docker环境中所有的网段

docker network ls

容器端口映射

默认情况下,除了宿主机之外,任何主机无法访问远程访问docker容器,通过端口映射,可以把容器端口映射到宿主机的端口,这样其他主机就能访问容器了,映射到宿主机的端口,不需要设置防火墙规则,便可以使用(可以把多个端口映射的宿主机上)

命令如下:

docker run -it -p 9500:5000 --name=p1 python:3.7 bash
把容器5000映射到宿主机的9500端口

docker ps -a 可以查看一下
在这里插入图片描述

docker目录挂载(目录映射)

为了能把一部分业务数据保存在docker环境之外,或者把宿主机文件传入容器,所以需要给容器挂在宿主机的目录

docker环境只支持目录挂载,不支持文件挂载,而且一个容器可以挂载多个目录

命令如下:

实操:
   mkdir test 在/root/目录创建一个test目录
   cd test    进入test目录
   touch 1.txt  在test目录创建1.txt文件
   docker run -it -v /root/test:/root/test --name=p1 python:3.7 bash  容器挂载
   cd /root/test/  进入容器test文件
   ls 查看容器中的文件
   touch 2.txt 在容器中创建2.txt
   exit  退出容器
   cd test 并 ls   可以看到宿主机也有2.txt文件

实操部署flask

1. 宿主机创建项目文件夹;   
	mkdir test

2. 创建docker镜像,挂载目录并映射端口
docker run -it -d --name=p1 -p 9500:5000 -v /root/test:/root/test --net mynet --ip 172.18.0.2 python:3.7 bash

3.  查看容器运行情况;
docker ps -a

4. 进入p1容器
docker exec -it p1 bash

5. 安装项目依赖
pip insall flask ...

6. 拉取mysql镜像并创建mysql容器
docker pull mysql:8.0.18  指定版本,如果不指定则是最新镜像

docker run --name m1 -p 4306:3306 --net mynet --ip 172.18.0.3 -v /root/test:/var/lib/mysql -e 	
MYSQL_ROOT_PASSWORD=Admin123. -d mysql
#为了保证数据安全,需要把数据库的文件挂载到宿主机上,删掉容器后也不会影响

或

docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.23  
 账号root 密码 root

# 登陆mysql服务
docker exec -it mysql bash   # 退出用exit

mysql -uroot -proot  

docker update mysql --restart=always   # 设置mysql开机自启动(可选)

docker container logs mysql  # 查mysql启动时的日志

centos 8安装docker报错

Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Error: open /proc/self/uid_map: no such file or directory

解决办法:

1,卸载podman软件(可以使用rpm -qa|grep docker)
yum remove docker
2,下载docker-ce源
curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
3,安装docker-ce
yum install docker-ce -y

问题原因分析:
Centos 8使用yum install docker -y时,默认安装的是podman-docker软件

docker项目制作镜像(导入无网环境使用)

  • docker pull python:3.6 拉取镜像

  • docker run -it -name=p1 -v 宿主机目录:容器目录 python:3.6 /bin/bash 创建容器并进入该容器
    docker run -it -p 8001:8001 -v /root/project/code/game_resources:/root/game_resources --name=p1 python:3.7 bash

  • pip install reqxxxx -i https://pypi.tuna.tsinghua.edu.cn/simple 安装项目中第三放包

  • exit 退出容器

  • docker commit 刚才的id 打包镜像的名称:3.6;如: (docker commit 29ee0479770b python_diy:3.6)

  • docker save 刚提交的镜像:3.6 |gzip > 导出的路径.tar.gz;如:(docker save python_diy:3.6 |gzip > python_images.tar.gz)

此时镜像已经制作成功

开始导入镜像

  • docker load < tar 包所在路径;如:(docker load < /root/gf/python_images.tar.gz)
  • docker run -it -name=p1 -v 宿主机目录:容器目录 python_diy:3.6 /bin/bash

docker安装mysql

  • docker pull mysql:5.7
  • docker run \
    -p 3306:3306 --name mysql
    -v /mydata/mysql/log:/var/log/mysql \
    -v /mydata/mysql/data:/var/lib/mysql \
    -v /mydata/mysql/conf:/etc/mysql \
    -e MYSQL_ROOT_PASSWORD=Admin123. \
    -d mysql:5.7

配置端口映射:

-p 3306:3306 --name mysql
将容器的3306端口映射到主机的3306端口

配置mysql数据卷挂载
1.-v /mydata/mysql/log:/var/log/mysql(日志文件挂载)
将容器中的日志文件夹挂载到主机对应的/var/log/mysql文件夹中

2.-v /mydata/mysql/data:/var/lib/mysql(数据文件挂载)
将容器中的数据文件夹挂载到主机对应的/var/lib/mysql文件夹中

3.-v /mydata/mysql/conf:/etc/mysql(配置文件挂载)
将容器的配置文件夹挂载到主机对应的/etc/mysql文件夹中
注(这里所提的主机指的是当前的linux主机)

配置用户并设置初始化root用户的密码
-e MYSQL_ROOT_PASSWORD=root

指定镜像资源
-d mysql:5.7
-d:以后台方式运行实例
mysql:5.7:指定用这个镜像来创建运行实例

安装nginx

  • docker pull nginx:latest
  • docker run -it --name=ng -p 80:80 -d nginx:lates
    (注加上-v目录映射:配置文件和静态文件,项目文件)

完整部署流程如下:

  1. 创建nginx容器(方便把配置文件复制出来)

    docker run -it --name=nginx -p 80:80 -d nginx:1.2    
    
  2. 复制nginx配置文件到宿主机

     docker cp nginx:/etc/nginx/ /etc/nginx/
    
  3. 删除刚才创建的容器(开始正式创建);

     docker rm -f nginx
    
  4. 开始正式创建nginx容器;
    docker run -it
    -v /etc/nginx/:/etc/nginx/
    -v /root/project/static/:/root/project/static/
    -p 80:80
    -p 443:443
    –restart=unless-stopped
    –name=nginx
    -d nginx:1.21

     docker run -it -v /etc/nginx/:/etc/nginx/ -v /root/project/static/:/root/project/static/ -p 80:80 -p 443:443 --restart=unless-stopped --name=nginx -d nginx:1.21 
    
  5. 完事;

自动启动容器命令

Docker容器的重启策略
Docker容器的重启策略是面向生产环境的一个启动策略,在开发过程中可以忽略该策略。

Docker容器的重启都是由Docker守护进程完成的,因此与守护进程息息相关。

Docker容器的重启策略如下:

  • no,默认策略,在容器退出时不重启容器
  • on-failure,在容器非正常退出时(退出状态非0),才会重启容器
  • on-failure:3,在容器非正常退出时重启容器,最多重启3次
  • always,在容器退出时总是重启容器
  • unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

示例:

docker run --name mysql -d -p 3306:3306 --restart unless-stopped -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7


创建容器时没有添加参数 --restart=always ,导致的后果是:当 Docker 重启时,容器未能自动启动。
Docker 命令修改

docker container update --restart=always 容器名字

无网安装docker

下载rpm包

Docker CE 安装包:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-19.03.8-3.el7.x86_64.rpm
Docker CE CLI 安装包:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-19.03.8-3.el7.x86_64.rpm
containerd.io 安装包:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm

安装依赖包,例如:

rpm -ivh docker-ce-cli-19.03.8-3.el7.x86_64.rpm
rpm -ivh containerd.io-1.2.13-3.1.el7.x86_64.rpm

安装 Docker,例如:

rpm -ivh docker-ce-19.03.8-3.el7.x86_64.rpm

启动 Docker 服务,例如:

systemctl start docker

验证 Docker 是否安装成功,例如:

docker version

如果能够输出 Docker 版本信息,则说明 Docker 安装成功。

注意:在无网环境下安装 Docker,可能会遇到依赖包缺失、版本不匹配等问题,需要根据具体情况进行调整。

报错处理:

警告:containerd.io-1.2.13-3.1.el7.x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID 621e9f35: NOKEY
错误:依赖检测失败:
        container-selinux >= 2:2.74 被 containerd.io-1.2.13-3.1.el7.x86_64 需要

解决: [root@iZt4nglb5p7ah5ohcznotkZ docker]# yum install container-selinux

你可能感兴趣的:(笔记,docker,python,linux)