如何保持环境一致?
pip3 freeze > requerment.txt
pip install -r requerment.txt
1.环境不一致
2.配置文件不一致
3.技术水平不一致,导致部署环境快慢不一致
# docker
- 一处编译,到处运行
- 对系统的消耗不是特别的多
- 可以快速启动
- 维护简单
- 扩展容易
## 镜像
可以理解为操作系统的ios镜像
## 容器
启动后的镜像
## 仓库
镜像
私有的仓库
公共的仓库
docker-ce 社区版本
docker-ee 商业版本
## 底层实现原理
namespace
cgroup
linux 内核的技术
## 安装
```SHELL
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
```
## 配置加速器
```SHELL
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://1nj0zren.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com"
]
}
systemctl daemon-reload
systemctl restart docker
```
## 第一个命令
```shell
docker run hello-world
```
## docker 搜索镜像
```SHELL
NAME DESCRIPTION STARS OFFICIAL
mysql MySQL is a widely used, open-source relation… 8560 [OK]
name 名字
DESCRIPTION 描述信息
STARS 点赞数
OFFICIAL 是否是官方提供
```
## 查看镜像命令
```SHELL
docker images
```
docker 镜像是分层的
## 显示镜像的id
```shell
docker images -q
```
## 列出部分镜像
```shell
docker images mysql
```
## 删除镜像
```shell
docker rmi name|id
```
## 删除全部镜像
```shell
docker rmi `docker images -q`
```
## 启动容器
```shell
docker run 镜像名称
先查找本地是否存在镜像
如果不存在则去下载镜像
下载以后再启动
容器启动以后在原来的镜像基础上在新建一层
```
## 查看容器
```SHELL
docker ps #默认查询是运行中的容器
-a 查看所有的
-q 只查看容器的id
```
## 容器执行命令
```SHELL
docker run centos /bin/echo 'hongxu'
```
## 启动并进入镜像
```shell
docker run -ti centos /bin/bash
-t 创建一个虚拟终端
-i 将容器的标准输入保持打开
退出 exit
ctrl +d
--name 指定名字
-d 后台运行
—P 将容器的端口暴露在宿主机的随机端口上
-p 宿主机端口:容器端口
-v 宿主机目录:容器指定目录(可以实现将宿主机目录挂载到容器中)
```
## 制作自己的镜像
```shell
docker commit -m "xinx" mycentos:laster
```
## 导出镜像
```shell
docker save -o mycentos.tar.gz mycentos
docker save mycentos > mycentos.tar.gz
```
## 删除容器
```SHELL
docker rm # 默认只能删除未运行的容器
-f 强制删除
```
## 导入镜像
```shell
docker load -i mycentos.tar.gz
docker load < mycentos.tar.gz
```
## scp
linux之间互相传递文件
## 查看端口映射关系
```SHELL
docker port 容器id或者容器名称
```
## 关闭docker容器
```shell
docker stop 容器id或者容器名称
```
## 启动docker容器
```SH
docker start 容器id或者容器名称
```
## 获取容器的运行状态
```SHELL
docker stats 容器id或者容器名称
```
## 查看日志
```shell
docker logs 容器id或者容器名称
-f 实时输出
```
## 进入容器
```SHELL
docker exec -ti 容器id或者容器名称 /bin/bash
```
## 移除所有停止状态的容器
```shell
docker container prune
```
## dockerfile
```SHELL
FROM mycentos # 指定基础镜像
COPY epel.repo /etc/yum.repos.d/ # 复制文件
RUN yum install -y nginx # 运行命令
RUN mdkir /data/html
RUN echo 'mynginx' > /data/html/index.html
COPY nginx.conf /etc/nginx/nginx.conf #只复制
ADD # 复制并解压压缩包
ENV alex=alexdsb # 设置环境变量
ENV wulaoban=dsb
WORKDIR /data/html # 设置工作目录,exec进入之后直接进入的目录
EXPOSE 80 # 设置端口
VOLUME # 指定容器的目录
CMD /bin/bash -c systemctl start nginx # 运行命令
RUN和CMD的区别
RUN可以有多个
CMD只能有一个,如果有多个到话,按最后一个算
```
scp 192.168.159.132:/opt/nginx/conf/nginx.conf .
### build
```SHELL
docker build -t name:tag -f dockerfile .
vi nginx
docker build -t mynginx:v2 -f nginx .
docker run -d -p 86:80 mynginx:v1
docker run -ti mynginx:v2 /bin/bash
```
## 部署django
```shell
FROM mycentos
COPY epel.repo /etc/yum.repos.d/
RUN yum install -y python36 python36-pip python36-devel
RUN pip3 install django==1.11 pymysql django-multiselectfield -i https://pypi.douban.com/simple
COPY supcrm /data/supcrm
WORKDIR /data/supcrm
RUN python3 manage.py migrate
EXPOSE 8080
CMD python3 manage.py runserver 0.0.0.0:8080
```
## 远程仓库
```SHELL
docker login #登录dockerhub网站
docker tag django wangfeng7399/django # 修改名称
docker push wangfeng7399/django # 上传
```
## 本地仓库
本地仓库默认使用是https
```SHELL
docker run -p 5000:5000 -d -v /opt/data/registry:/var/lib/registry registry
docker tag django 127.0.0.1:5000/django
docker push 127.0.0.1:5000/django
## 检查
curl 127.0.0.1:5000/v2/_catalog
{"repositories":["django"]}
```
### 解决办法:
```SHELL
cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://1nj0zren.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.21.128:5000"
]
}
docker tag django 192.168.21.128:5000/django
docker push 192.168.21.128:5000/django
```
## docker 编排工具
- swarm
- mesos
- k8s
- kubernetes
- compose 嫡系
```SHELL
pip3 install docker-compose
```
## 语法是基于yaml
- 列表 \-
- 字典 key: value
- 后缀名 yaml yml
### yaml文件
默认是docker-compose.yml
-f 文件
```shell
version: '3.4'
services:
web:
build: #编译
context: .
dockerfile: flaskdf
ports: #指定端口
- "15000:5000"
redis:
image: 'redis' # 指定镜像文件
```
启动命令是
docker-compose up