04 Docker内容补充
第四章 Docker内容补充
目录
0 总结
1 介绍docker
-docker ce和docker ee
-版本:17年 19.03.
-架构:c/s 符合restful规范
-详细架构:架构图
-kvm,vmware,openstack,docker,k8s
2 docker 安装
-windows(不推荐),mac安装(软件安装)
-乌班图
-centos:必须7以上,内核版本必须大于3.1,新软件
-照着笔记一步一步来
-启动:systemctl start/restart/stop docker
-docker -v
3 镜像和容器
-类和对象
4 镜像操作
-docker pull 名字:v1
-docker rmi 镜像id号 docker image rm 镜像id号
-docker images docker image ls
5 容器操作
-创建:create
-运行:start
-创建并运行:run
-i:运行容器
-d:容器后台运行【守护进程】
-t:启动并进入容器
-v:宿主机路径:容器路径 # 不管是宿主机还是容器修改文件,相互影响
-p:端口映射 宿主机端口:容器端口 #以后访问宿主机端口就相当于访问容器
--name:指定容器名字 # 如果不指定也会随机一个
-e:指定环境变量 # 往容器的环境变量中加了这个东西
docker run -di --name=mysql_test -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql # 这里拉取了什么容器,就需要使用该容器对应的客户端去进行连接【比如:使用navicate连接docker下的mysql,ubuntu就是使用/bin/bash连接】
-文件拷贝 # 补充内容
-docker cp 宿主机文件或者路径 容器id:容器路径
-docker cp 容器id:容器路径 宿主机文件或者路径
-删除容器
docker rm 容器id
-停止容器
docker stop 容器id
# 容器之所有一直在运行的原因是,有一个前台进程在夯住【启动ubuntu容器,就是执行的/bin/bash】
-查看容器详细信息
docker inspect 容器id
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
# 多个容器互通,可以通过ip,端口映射,机名
6 应用部署 # 下述部署都只是示例,不推荐,因为数据都在容器内部,实际使用,需要进行数据卷挂载
-部署nginx
docker run -di --name=mynginx -p 80:80 nginx
-部署mysql
docker run -di --name=mysql_test -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
-部署redis
docker run -di --name=myredis -p 6379:6379 redis
1 迁移与备份
1.0 总结
# 删除所有容器()
docker rm `docker ps -a -q`
# 删除所有镜像
docker rmi `docker images -q`
# 通过自己构建的image启动容器【后面需要添加自己的django执行命令,也可以写在dockerfile中】
docker run -id --name=mydjango -p 8088:8088 mydjango python /project/django_test/manage.py runserver 0.0.0.0:8088
# 查看容器运行日志
docker logs 容器id
# 操作步骤
1 启动一个python容器
docker run -di --name=yangyi python:3.6
2 进入装软件
docker exec -it yangyi /bin/bash
mkdir /project
pip install django==1.11.1
退出
3 把项目拷贝到容器内部
docker cp /opt/yangyi/django_test lqz:/project
4 把容器做成镜像
docker commit yangyi mydjango
5 基于自己做的镜像运行容器
docker run -id --name=mydjango -p 8088:8088 mydjango python /project/django_test/manage.py runserver 0.0.0.0:8088
注意:
docker exec -it mydjango mkdir helloworld
也就是说,exec
中可以执行简单命令。
1.1 容器保存为镜像
docker commit 容器名字 镜像名字
docker commit django_demo mydjango
pip install django==1.11.11 -i https://pypi.douban.com/simple/
1.2 把镜像打包成压缩包
docker save -o mydjango.tar mydjango
1.3 把压缩包恢复为镜像
docker load -i mydjango.tar
2 Dockerfile【重要】
2.1 Dockerflie是什么?
就是一个文件,存放一堆指令,通过该文件可以生成镜像。
2.2 Dockerfile指令:
命令 | 作用 |
---|---|
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条) |
RUN command | 是Dockerfile的核心部分(可以写多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录【就是执行操作的目录,进去容器在哪个路径下】 |
VOLUME
和EXPOSE
这些东西可以不写,在启动容器的时候主动做映射就行。
2.3 写一个Dockerfile
文件名必须叫Dockerfile
FROM python:3.6
MAINTAINER yangyi
EXPOSE 8080 # 可以在创建容器的时候直接挂载即可
ADD ./requirement.txt /home/ # 将该目录下的requirement.txt文件拷贝到/home/中【一般dockerfile和requirement.txt混合使用】
RUN pip install -r /home/requirement.txt -i https://pypi.douban.com/simple/
RUN pip install uwsgi -i https://pypi.douban.com/simple/
VOLUME ["/home"] # 没啥用,直接创建容器的时候直接挂载即可
WORKDIR /home/django_test
CMD ["python", "/home/django_test/manage.py", "runserver", "0.0.0.0:8080"] # 运行这个容器的时候,会执行什么命令 【可以把django的启动命令写到CMD中】
通过Dockerfile
构建出镜像
docker build -t="django_1.11.11" . # 以当前路径下的`Dockerfile`构建出名为django_1.11.11镜像
依赖镜像启动容器:
docker run -di --name=mydjango2 -v /opt/yangyi/:/home -p 8080:8080 django_1.11.11 // 将宿主机中的yangyi/文件夹挂载到/home/文件夹下
之后,在外部访问即可。
当然,可以启动多个docker容器(宿主机的不同端口映射到容器的同一端口上)。
# 多启动几个docker容器
docker run -di --name=mydjango3 -v /opt/lqz/django_test2/:/home/django_test/ -p 8081:8080 django_1.11.11
docker run -di --name=mydjango3 -v /opt/lqz/django_test2/:/home/django_test/ -p 8082:8080 django_1.11.11
3 docker-compose
示例Dockerfile:
ARG PYTORCH="1.6.0"
ARG CUDA="10.1"
ARG CUDNN="7"
FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel
ENV TORCH_CUDA_ARCH_LIST="6.0 6.1 7.0+PTX"
ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all"
ENV CMAKE_PREFIX_PATH="$(dirname $(which conda))/../"
RUN apt-get update && apt-get install -y git ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6 ffmpeg \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Install mmcv-full
RUN pip install mmcv-full==latest -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html
# Install MMAction2
RUN conda clean --all
RUN git clone https://github.com/open-mmlab/mmaction2.git /mmaction2
WORKDIR /mmaction2
RUN mkdir -p /mmaction2/data
ENV FORCE_CUDA="1"
RUN pip install cython --no-cache-dir
RUN pip install --no-cache-dir -e .