确认过眼神,这是你要的 Docker 技能清单

讲道理,每个程序员都应该有一份docker技能清单。像docker这种重要加分还加钱的技能怎么能不会呢,但是用的少容易生疏,所以我把我印象笔记里的docker技能清单放出来了

前言

为了大家能够边动手测试,安装方式我也说一下

  1. 安装

老版本docker

yum install docker -y
复制代码

最新版本的docker

cat >/etc/yum.repos.d/docker.repo <<EOF 
[dockerrepo] 
name=Docker Repository 
baseurl=https://yum.dockerproject.org/repo/main/centos/7 
enabled=1 
gpgcheck=1 
gpgkey=https://yum.dockerproject.org/gpg 
EOF

yum install docker-engine -y
复制代码
  1. 启动和放入启动项

centos7.0版本

systemctl start docker
systemctl enable docker
复制代码

兼容老版本

service docker start
chkconfig docker on
复制代码

docker使用

查看docker信息

查看docker版本

docker version
复制代码

显示docker系统的信息

docker info
复制代码

镜像操作

搜索镜像

docker search [镜像] 
复制代码

下载镜像

docker pull [镜像] 
sudo docker pull ubuntu:12.04
docker pull registry.hub.docker.com/ubuntu:12.04 
复制代码

发布镜像

docker push [镜像] 	
复制代码

删除镜像

docker rmi [镜像] 
复制代码

查看本地镜像(列目录)

docker images		
复制代码

历史镜像

docker history [镜像]
复制代码

删除镜像

docker rmi [镜像]/ID 	
复制代码

删除所有停止的镜像

docker rmi `docker images -q`
复制代码

删除所有停止的镜像

docker rmi $(docker images -q)
复制代码

强制删除所有的镜像

docker rmi -f `docker images -q`
复制代码

强制删除所有的镜像

docker rmi -f $(docker images -q)
复制代码

删除未打标签的镜像

docker rmi $(docker images -q -f dangling=true)
复制代码

容器操作

创建容器

输出hello world

docker run [镜像] /bin/echo hello world
复制代码

交互式进入容器

docker run -i -t [镜像] /bin/bash 
复制代码

在容器安装新的程序

docker run [镜像]  apt-get install -y app_name
复制代码

进入容器

docker exec -it kali /bin/bash
复制代码

启动容器,后台运行

docker run -it -d kali	
复制代码

启动容器的时候可以映射端口

docker run -it -p 53:53 kali
复制代码

查看容器

列出当前运行的容器

docker ps 	
复制代码

列出所有的容器

docker ps -a 	
复制代码

列出最近一次启动的容器

docker ps -l 	
复制代码

查看所有的容器ID

docker ps -a -q
复制代码

容器操作

显示容器信息

docker inspect [容器名字]/ID 
复制代码

启动容器

docker start [容器名字]/ID	
复制代码

停止容器

docker stop [容器名字]/ID	
复制代码

杀死容器

docker kill [容器名字]/ID	
复制代码

重新启动容器

docker restart [容器名字]/ID
复制代码

进入容器

docker attach [容器名字]/ID	
复制代码

查看容器日志

docker logs [容器名字]/ID	
复制代码

查看容器修改操作

docker diff [容器名字]/ID	
复制代码

显示容器进程信息

docker top [容器名字]/ID
复制代码

从容器中拷贝数据到本地

docker cp ID:/path to_path
复制代码

从容器中拷贝数据到本地

docker cp [容器名字]:/path to_path	
复制代码

另类入容器方法

PID = docker inspect --format "{ {.State.Pid} }" [容器名字]/ID
nsenter -t $PID -u -i -n -p
复制代码

删除容器

删除容器

docker rm [容器]/ID 
复制代码

删除所有停止的容器

docker rm `docker ps -a -q` 
复制代码

删除所有停止的容器

docker rm $(docker ps -a -q) 
复制代码

强制删除所有的容器

docker rm -f `docker ps -a -q` 	
复制代码

强制删除所有的容器

docker rm -f $(docker ps -a -q) 
复制代码

导出和导入容器

方法一

保存(保存镜像到一个tar包; -o, –output=”” Write to an file )

docker save [容器名字] -o [路径]	
复制代码

加载( 加载一个tar包格式的镜像; -i, –input=”” Read from a tar archive file )

docker load -i [路径]
复制代码
方法二

保存为tar格式

docker save [容器名字] > [路径]/xxxx.tar
复制代码

加载tar文件进入docker

docker load [容器名字] < [路径]/xxxx.tar
复制代码

Dockerfile

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令

一开始必须指明所基于的镜像名称,接下来推荐说明维护者信息。后面则是镜像操作指令,例如 RUN 指令,RUN 指令将对镜像执行跟随的命令。每运行一条 RUN 指令,镜像添加新的一层,并提交。最后是 CMD 指令,来指定运行容器时的操作命令

指令

FROM

FROM <image>:<tag>
复制代码

MAINTAINER

MAINTAINER <name>
复制代码

RUN

RUN <command>
RUN ["/bin/bash", "-c", "echo hello"]
复制代码

每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。
当命令较长时可以使用 \ 来换行

CMD

支持三种格式

  • CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
  • CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
  • CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;

指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD
命令。如果指定了多条命令,只有最后一条会被执行。

如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令

EXPOSE

格式为 EXPOSE […]。

告诉 Docker 服务端容器暴露的端口号,供互联系统使用。
在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口

ENV

ENV 。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持

ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
复制代码

ADD

格式为 ADD 。

该命令将复制指定的 到容器中的 。 其中 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)

COPY

格式为 COPY 。

复制本地主机的 (为 Dockerfile 所在目录的相对路径)到容器中的 。当使用本地目录为源目录时,推荐使用 COPY

ENTRYPOINT

两种格式:

ENTRYPOINT ["executable", "param1", "param2"]
# (shell中执行)。
ENTRYPOINT command param1 param2
复制代码

配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。

每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效

VOLUME

格式为 VOLUME [“/data”]。

创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等

USER

格式为 USER daemon。

指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户

WORKDIR

格式为 WORKDIR /path/to/workdir。

为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。

可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如

WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
复制代码

则最终路径为 /a/b/c

ONBUILD

格式为 ONBUILD [INSTRUCTION]。

配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。

例如,Dockerfile 使用如下的内容创建了镜像 image-A。

[...]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]
复制代码

如果基于 image-A 创建新的镜像时,新的Dockerfile中使用 FROM image-A指定基础镜像时,会自动执行 ONBUILD 指令内容,等价于在后面添加了两条指令。

FROM image-A

#Automatically run the following
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src
复制代码

使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild

其他

我有一句话一定要说:“我虽然不太会写文章,但是我有干货。点赞加关注,不要错过。”

如果觉得本文对您有帮助,请点赞分享或关注起来,如果有兴趣也可以浏览作者的其他文章。
如果觉得本文浪费了您的时间,希望评论区能留下您的宝贵意见。
如果有疑问也请留言,作者愿花时间和精力去找寻答案,一起探讨。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享