社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

Docker必备基础知识

GiantPandaCV • 4 年前 • 488 次点击  

【GiantPandaCV导语】很多算法攻城狮朋友在日常工作中都会接触和使用到docker来进行自己的训练环境配置或者部署环境搭建。本次和大家分享一些笔者总结的docker基础知识。

一、docker是什么?

docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小。

二、身为算法攻城狮,我们要掌握docker的哪些知识?

1)docker的基础组成部分

docker由:客户端、守护进程、镜像、容器和仓库构成。

客户端(client)和守护进程(daemon)

docker的客户端就是你的操作端,你在这里输入docker的一些指令,守护进程就是docker的服务器端,这一端会执行你的指令并返回结果

镜像(image)

是一个层叠的只读文件系统,docker通过读取其中的文件来启动一个指定的容器

容器(containter)

使用者通过启动某个指定镜像而构件的一个虚拟的操作系统(guest os)就叫做容器,在容器内就像在一个真正的系统内操作一样。

仓库

仓库放置了别人做好的多个镜像。可根据需要下载

2)docker基本操作:安装、仓库设置、启动、关闭、退出、进入

docker安装

https://yeasy.gitbook.io/docker_practice/install/ubuntu

docker的镜像加速器,用以从官方镜像仓库中拉取自己需要的镜像

https://yeasy.gitbook.io/docker_practice/install/mirror

启动docker

sudo systemctl daemon-reload  #重新加载某个服务的配置文件
sudo systemctl restart docker #重新确定docker

基础操作

# 获取镜像
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
# 启动镜像
docker run -it ubuntu:18.04 bash # dokcer run的参数可通过--help来查看
# 关闭容器
docker stop -t=ContainerID 或 docker kill -t=ContainerID
# 暂时退出镜像
exit
# 重新进入镜像
sudo docker exec -it 067 /bin/bash
# 启动一个已停止的容器
docker start 067
# 查看当前docker上容器的运行状态
docker ps

3)docker进阶操作:

请通过 docker command --help查看

三、使用别人的镜像具体案例

# 拉取镜像
docker pull ubuntu:18.04 #从仓库中拉取镜像
# 查看本地的image
docker images #查看本地仓库内的镜像
# 用image启动一个容器
docker run -it ubuntu:18.04 bash
# 暂时退出并重新进入容器
exit
docker ps -a
sudo docker exec -it 067 /bin/bash  #此处067是上一指令查到的需要进入的容器ID
# 在容器内进行操作
和ubuntu系统内的操作一致
cat /etc/os-release

四、做自己的镜像具体案例

# 拉取基础镜像
docker pull ubuntu:18.04 #从仓库中拉取镜像
# 制作自己的Dockerfile
mkdir ppp&&cd ppp
touch Dockerfile 或 vi Dockerfile
# 制作镜像
docker build -t aaa:bbb .
docker images #在本地镜像列表里就可以看到一个tag为aaa:bbb的image
# 上传镜像
docker commit -a "aaa.com" -m "my apache" a404c6c174a2  ccc:ddd

Dockerfile说明

是用来逐层构件一个image的脚本文件,是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

FROM ubuntu:18.04  # 指定基础镜像 如果为scratch代表从下一行开始是镜像的第一层
RUN echo '

Hello, Docker!

'
 > /usr/share/nginx/html/index.html # RUN指令用来执行命令,每一行代表新建docker的一个layer
#能在一个layer内执行的指令就通过&& 进行联接,并可应用shell中的换行符\
#在dockerfile每层都要检查,下载,展开的多余文件,以及缓存等能删除的尽量都去掉

COPY #COPY 指令将从构建上下文目录中  的文件/目录复制到新的一层的镜像内的  位置。
COPY package.json /usr/src/app/ # 将当前上下文路径的json文件复制到image的指定路径下

AND #丰富了COPY的功能,但是会降低构件image速度,如果不需要自动解压缩,则不推荐使用该指令

CMD # ????????? 还没理解

ENTRYPOINT # 当存在 ENTRYPOINT 后,CMD 的内容将会作为参数传给ENTRYPOINT,从而达到了我们预期的效果。

ENV #用来设置环境变量  ENV   或 ENV = =...
ENV VERSION=1.0 DEBUG=on \
    NAME="Happy ONE"

ENV LD_LIBRARY_PATH=\
$LD_LIBRARY_PATH:\
$NAME/alpha

ARG # ARG [=] Dockerfile 中的 ARG 指令是定义参数名称,以及定义其默认值。该默认值可以在构建命令 docker build 中用 --build-arg = 来覆盖

ARG DOCKER_USERNAME=library # 注意:在FROM之前定义的ARG参数,会消失,在FROM后需要重新定义
# ARG 所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的。但是不要因此就使用 ARG 保存密码之类的信息,因为 docker history 还是可以看到所有值的。

VOLUME # 用于指定image启动时挂载到容器中的默认卷,而不是写入容器存储层
VOLUME /data # VOLUME ["", ""...] 或 VOLUME 
在image启动时可替换
docker run -d -v mydata:/data xxxx #其中的 -v mydata:/data 就是挂载宿主机的卷到容器内

EXPOSE # EXPOSE  [...] EXPOSE 指令是声明容器运行时提供服务的端口,这只是一个声明,在容器运行时并不会因为这个声明应用就会开启这个端口的服务
# 在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口

WORKDIR # WORKDIR  使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会帮你建立目录。

USER  # USER [:] 指定当前用户
HEALTHCHECK
ONBUILD
LEBEL
SHELL #SHELL 指令可以指定 RUN ENTRYPOINT CMD 指令的 shell,Linux 中默认为 ["/bin/sh", "-c"]   
Dockerfile 多阶段构建

五、一些docker使用时的小习惯

docker的文件管理系统是逐层实现的,所以构件一个docker的image时,不要添加过多的layers以避免image过大且过于复杂。


- END - 


欢迎加入GiantPandaCV交流群


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/118062
 
488 次点击