vmware是轻量级虚拟机,只虚拟了少量的硬件设备,虚拟实例共享使用Linux内核
关闭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加速器
打开dockerhub 在搜索框输入python
配置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
出现这个即为执行成功
vim /etc/docker/daemon.json 去掉结尾逗号
service docker restart 重启
镜像相关命令
启动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目录挂载(目录映射)
为了能把一部分业务数据保存在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启动时的日志
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 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)
此时镜像已经制作成功
开始导入镜像
配置端口映射:
-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 run -it --name=nginx -p 80:80 -d nginx:1.2
复制nginx配置文件到宿主机
docker cp nginx:/etc/nginx/ /etc/nginx/
删除刚才创建的容器(开始正式创建);
docker rm -f nginx
开始正式创建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
完事;
Docker容器的重启策略
Docker容器的重启策略是面向生产环境的一个启动策略,在开发过程中可以忽略该策略。
Docker容器的重启都是由Docker守护进程完成的,因此与守护进程息息相关。
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 容器名字
下载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