序
讲道理,每个程序员都应该有一份docker技能清单。像docker这种重要加分还加钱的技能怎么能不会呢,但是用的少容易生疏,所以我把我印象笔记里的docker技能清单放出来了
前言
为了大家能够边动手测试,安装方式我也说一下
- 安装
老版本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
复制代码
- 启动和放入启动项
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
其他
我有一句话一定要说:“我虽然不太会写文章,但是我有干货。点赞加关注,不要错过。”
如果觉得本文对您有帮助,请点赞分享或关注起来,如果有兴趣也可以浏览作者的其他文章。
如果觉得本文浪费了您的时间,希望评论区能留下您的宝贵意见。
如果有疑问也请留言,作者愿花时间和精力去找寻答案,一起探讨。