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 设置工作目录【就是执行操作的目录,进去容器在哪个路径下】

VOLUMEEXPOSE这些东西可以不写,在启动容器的时候主动做映射就行。

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 .
posted @ 2023-05-02 10:21  YangYi215  阅读(28)  评论(0编辑  收藏  举报