一文读懂docker使用

Docker使用简介

什么是Docker

像虚拟机又不是虚拟机的一个环境。
详细信息

为什么要用Docker

如果你有以下需求,就需要使用到Docker。

  1. 你在一台公用服务器上没有root权限,而又需要root权限。
  2. 你在做一些操作时可能会污染到系统环境,而又不想让系统环境被污染。
  3. 你需要发布你的程序,给用户一个一行命令能跑通的环境。
  4. 其他原因

如何使用Docker

Docker中的概念

Docker中最重要的两个概念
  1. 镜像(image):可以理解为一张光盘、一段代码或者一个配置文件,是一个静态的概念。
  2. 容器(container):可以理解为一个进程,是一个动态的概念。动态意味着会有自己的生命周期及各种状态。

Docker中容器的生命周期
在这里插入图片描述

Docker中Image的由来

Image有两种制作方式:

  1. 通过编写Dockerfile来制作
  2. 通过运行状态的Container使用docker commit命令来制作
    [外链图片转存失败(img-UVRu2KRS-1562919772086)(media/15414235420912/%E6%9C%AA%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6.png)]

Container一般都由docker run来产生

Docker中Image的组织结构

假设有如下一个Dockerfile文件

FROM tensorflow/tensorflow:1.12.0-gpu-py3
RUN pip install bert-serving-server bert-serving-client flask
WORKDIR /tmp
RUN apt update && apt install locales \
	&& locale-gen en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US.UTF-8

我们使用docker build -t bert_similarity:test .命令构建镜像

Step 1/7 : FROM tensorflow/tensorflow:1.12.0-gpu-py3
 ---> 413b9533f92a
Step 2/7 : RUN pip install bert-serving-server bert-serving-client flask
 ---> Using cache
 ---> e1ab6d13c7bf
Step 3/7 : WORKDIR /tmp
 ---> Using cache
 ---> 1f3eb3637d48
Step 4/7 : RUN apt update && apt install locales 	&& locale-gen en_US.UTF-8
 ---> Using cache
 ---> dcbe00117168
Step 5/7 : ENV LC_ALL=en_US.UTF-8
 ---> Using cache
 ---> 4ce805435e64
Step 6/7 : ENV LANG=en_US.UTF-8
 ---> Using cache
 ---> b4389530c8ca
Step 7/7 : ENV LANGUAGE=en_US.UTF-8
 ---> Using cache
 ---> b40e0a3e0c93
Successfully built b40e0a3e0c93
Successfully tagged bert_similarity:test

可以看到,Dockerfile中的每一行命令都会对应地构建一层,每一层都有一个属于自己的唯一标示码,多个镜像会共用拥有同一个,例如,tensorflow/tensorflow:1.12.0-gpu-py3的码就是413b9533f92a,很多FROM tensorflow/tensorflow:1.12.0-gpu-py3的镜像都是以它为基础制作的。由于这样的依赖关系的存在,在删除镜像时可能会产生依赖问题,以及删除镜像时所释放的空间,其实是该镜像所独特的层所占用的空间。

这样的组织结构的好处主要有两点:
1.节省存储空间
2.在build时如果遇到错误时可以不必再从开头进行构建(cache机制,可以指定–no-cache)

常用的Dockerfile命令

FROM
RUN
ADD
WORKDIR
ENV

Docker中常用的命令

docker命令速查手册(含各参数内容介绍以及使用示例)

1. docker images

查看镜像

>docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centosvim           latest              3c387eca042f        About an hour ago   355MB
centos              latest              75835a67d134        3 weeks ago         200MB
hello-world         latest              4ab4c602aa5e        8 weeks ago         1.84kB
2. docker run -d --name=[CONTAINERNAME] --rm --runtime=nvidia -v [SOURCEDIR]:[CONTAINERDIR] [IMAGENAME]:[TAG]

一个创建一个新容器的例子

docker run -it -v /home/liupei/project/neo4j:/var/lib/neo4j -w /home/liupei/project/neo4j -d -p 7474:7474 -p 7687:7687 -p 1111:22 liupei:neo4j2

一个建议的使用例子

>docker run -d --name=zxr --runtime=nvidia -v /home/zxr/bert_similarity:/bert_similarity  --rm -p 20086:20086 bert_similarity
e4e2626f94cf306301dfea379f6060041c374e231f0c65dbbe860338b5204e34

>docker exec -it zxr bash

3. docker ps

查看运行中的容器

>docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
0f6fad31056c        centos              "/bin/bash"         About an hour ago   Up About an hour                        condescending_murdock
4. docker ps --all

查看所有容器

>docker ps --all
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
0f6fad31056c        centos              "/bin/bash"         About an hour ago   Up About an hour                             condescending_murdock
416635fe8cc0        hello-world         "/hello"            2 hours ago         Exited (0) 2 hours ago                       admiring_mestorf
5. docker exec -it [CONTAINERNAME] bash
6. docker commit [CONTAINERID] [new imagename]:[tag]

将某个容器重新打包成一个镜像

>docker commit 0f6fad31056c centosvim
7. docker cp SRC_PATH CONTAINER:DEST_PATH

将文件从主机拷贝至某个容器中

>docker cp test 0f6fad31056c:/home/tmp
>[root@0f6fad31056c tmp]# ls
test
8. docker stop [CONTAINERID]

停止某个id的容器

9. docker rm [CONTAINERID]

删除某个id的容器(需要先stop)

docker rm 0f6fad31056c
10. docker rmi [IMAGEID]

删除某个id的镜像

>docker rmi 3c387eca042f
Untagged: centosvim:latest
Deleted: sha256:3c387eca042f838491847053ab9a19d5ca229fa0b58a0fc8666c8b9e5b387716
Deleted: sha256:3aa3e55e94b9a1d509c2480f51cf4a2156dd878a02632a6fee980b6d6f25c358
11. docker save
12. docker load
13. docker 删除废弃镜像和容器
$ docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }') //停止容器
$ docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }')  //删除容器 
$ docker rmi $(docker images | grep "none" | awk '{print $3}')  //删除镜像 
建议的使用方式
  1. 使用Dockerfile构建镜像
  2. 使用docker run -v[]:[] --rm --name=[] --runtime=nvidia -d ...启动容器,然后使用docker exec -it [] bash进入容器进行操作。在使用结束后docker stop []关闭容器。
  3. 代码和数据使用-v命令挂载到容器内,修改时在宿主机上进行修改,容器内不建议直接对文件进行修改
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值