云原生 • DockerDocker常用命令总结(值得收藏)
Posted _Bricks
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生 • DockerDocker常用命令总结(值得收藏)相关的知识,希望对你有一定的参考价值。
上一篇文章大家应该了解和搭建了Docker环境,Docker 是一个开源的应用容器引擎。
直通车:
【云原生 • Docker】初识Docker和Docker的坏境搭建(保姆级教学)
作为一名开发或者运维人员,掌握Dcoker的命令是必不可少的。Docker命令可以让我们更好的利用他提高我们的工作效率。
以下是我个人对Docker学习和使用的一步步总结,通过一个个示例来加深各位对Docker相关命令的理解以及记忆
命令分类
1、Docker 操作命令
启动 Docker
systemctl start docker
停止 Docker
systemctl stop docker
重启 Docker
systemctl restart docker
查看 Docker 状态
systemctl status docker
开机自动启动Dockers
systemctl enable docker
查看 Docker 概要信息
docker info
查看 Docker 版本
docker -v
查看 Docker 帮助文档, 忘记了某些命令便可使用此进行查看与回顾
docker --help
如忘记拉取命令,可以如下使用
docker pull --help
2、镜像相关命令
2.1 查询镜像
这些镜像都存储于 /var/lib/docker 目录下
#查询本地所有镜像
docker images
#查询镜像名为java的镜像列表
docker images java
列别 | 说明 |
---|---|
repository | 镜像名称 |
tag | 标签 |
image id | 镜像ID |
created | 镜像的创建日期 |
size | 镜像的大小 |
2.2 搜索镜像
搜索镜像
# 搜索镜像
docker search 镜像名
#搜索用户评价大于400的java镜像
docker search -f=stars=400 java
列别 | 说明 |
---|---|
name | 仓库名称 |
description | 镜像描述 |
stars | 用户评价,反映该镜像的受欢迎程度 |
official | 是否官方 |
automated | 该镜像是由 Docker Hub 自动构建流程创建的 |
2.3 拉取镜像
不加tag(版本号) 即拉取docker仓库中 该镜像的最新版本latest 加:tag 则是拉取指定版本
docker pull 镜像名
docker pull 镜像名:tag
- 拉取最新版 mysql
docker search mysql
- 拉取JAVA指定版本号的镜像
docker pull java
出现报错
Using default tag: latest
Error response from daemon: manifest for java:latest not found: manifest unknown: manifest unknown
这里错误的意思是Docker需要我们指定下载镜像的版本号,我们可以去Docker官方镜像搜索
docker pull java:openjdk-7-jre-alpine
2.4 删除镜像
- 镜像 ID 也可根据镜像名称
docker rmi 镜像ID
- 删除所有镜像
docker rmi $(docker images -q)
- 强制删除镜像
docker rmi -f 镜像ID
2.5 保存和加载镜像
#保存镜像
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
#加载镜像
docker load -i 镜像保存文件位置
2.6 镜像标签
镜像做一个标签添加,从而行进区分
docker tag 源镜像名:TAG 想要生成新的镜像名:新的TAG
# 如果省略TAG 则会为镜像默认打上latest TAG
docker tag aaa bbb
2.7 运行镜像
docker run 镜像名
docker run 镜像名:Tag
运行后,出现tomcat 默认占用的8080 端口,说明该镜像已经是启动了 ,但是 咱好像鼠标没有回到咱服务器上了 ,这怎么办呢 ?
使用 Ctrl+C (注:此方式虽然可以退出容器,但此种命令操作方式却是错误的,详细缘由请见下文的容器命令)
3、容器相关命令
3.1 查看容器
#查看运行容器
docker ps
#查看所有容器
docker ps -a
#查看最后一次运行的容器
docker ps -l
#查看停止的容器
docker ps -f status=exited
3.2 运行容器
docker run 镜像名
docker run 镜像名:Tag
-i 运行容器
-t 容器启动后自动进入其命令行
–name 为创建的容器命名
-v 表示目录映射关系,前者为宿主机目录,后者是映射到宿主机上的目录
-d 加了这个参数则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)
-p 表示端口映射,前者为宿主机端口,后者是容器内的映射端口
常用创建容器的方式为交互式创建容器和守护式创建容器,如下:
#交互式创建容器
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
#守护式创建容器
docker run -di --name=容器名称 镜像名称:标签
#登录守护式容器
docker exec -it 容器名称/ID /bin/bash
从容器内退出到自己服务器中,需注意两个退出命令的区别
#直接退出 未添加 -d(守护式容器) 时 执行此参数 容器会被关闭
exit
#优雅退出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭
Ctrl + p + q
创建一个tomca容器
docker run -id -p 8080:8080 --name=test17 tomcat1:test
# netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息
netstat -untlp
3.3 容器的停止、启动和重启
#启动容器
docker start容器名称/ID
#停止容器
docker stop 容器名称/ID
#重启容器
docker restart 容器名称/ID
#kill容器
docker kill 容器ID/容器名
3.4 容器文件拷贝
#从容器内 拷出
docker cp 容器ID/名称:容器内路径 容器外路径
#从外部 拷贝文件到容器内
docker cp 容器外路径 容器ID/名称:容器内路径
3.5 查看容器日志
docker logs --tail=要查看末尾多少行 默认all 容器ID
3.6 目录挂载
在创建容器时,我们可以将宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机的目录文件从而直接影响容器了。
docker run -di -v 宿主机目录:容器目录 --name=容器名称 镜像名称:标签
-v命令可以多次使用,即一个容器可以同时挂载多个文件,当容器删除时,宿主机文件数据目录仍在,下次启动容器只要将数据目录指向宿主机数据所在位置即可恢复!
3.7 更换容器名
docker rename 容器ID/容器名 新容器名
3.8 创建镜像
docker commit -a="作者" -m="说明" 容器ID/容器名 镜像名:标签
3.9 查看容器 IP 地址
# 查看容器 ip 以及相关的各种数据
docker inspect 容器名称/ID
# 查看容器 ip 地址并输出
docker inspect --format='.NetworkSettings.IPAddress' 容器名称/ID
3.10 删除容器
#删除一个容器
docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
docker rm -f $(docker ps -aq)
3.11 导入和导出容器
#导出容器
docker export 容器ID > XXX.tar
#import 从tar包中的内容创建一个新的文件系统再导入为镜像
cat XXX.tar | docker import - 镜像名:标签
4、运维相关命令
4.1 查看docker工作目录
docker info | grep "Docker Root Dir"
4.2 查看docker磁盘占用总体情况
du -hs /var/lib/docker/
4.3查看Docker的磁盘使用具体情况
docker system df
删除 无用的容器和 镜像
4.4 删除异常停止的容器
docker rm `docker ps -a | grep Exited | awk 'print $1'`
4.5 删除名称或标签为none的镜像
docker rmi -f `docker images | grep '<none>' | awk 'print $3'`
如果看到了这里,docker基本上入门了;但前路还长,让我们再继续深入,记得点个关注哟!
云原生-Dockerdocker镜像制作上传dockerfile命令解析
场景
- 在实际业务场景中,需要制作多个不同版本进行镜像使用,如maven版本、JDK、openJDK不同使用等,所以需要做多个针对不同版本做不同的镜像。
- 这里记录一下之前devops用的openJDK版本、某些部门需要用orcle JDK、特此需要做不同的镜像,镜像内包含centos、maven、jdk。
镜像制作
基础镜像
- 基础镜像拉去,如centos、alpine等
docker pull centos:7
jdk、maven
- 拉取centos基础镜像,把jdk、maven镜像制作进基础镜像中,在使用centos:7作为基础镜像,配置jdk版本及maven版本,当拉取镜像时可以直接使用,在devops使用过程中,可以直接run进行启动使用。
- dockerfile
FROM centos:7
MAINTAINER rundreams@yeah.net
WORKDIR /usr/bin/jdk
WORKDIR /usr/bin/mvn
COPY apache-maven-3.8.6 /usr/bin/mvn
COPY jdk1.8.0_202 /usr/bin/jdk
ENV LANG=C.UTF-8
ENV JAVA_HOME=/usr/bin/jdk
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV MAVEN_HOME=/usr/bin/mvn
ENV PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
- 然后下载maven、JDK版本在Dockerfile同级目录下,并配置Maven配置文件信息,如拉取仓库地址等
- 在同级目录存在文件夹 apache-maven-3.8.6、jdk1.8.0_202
- 基于进行可以根据要求选择,如果还有其他命令执行或者需要加入某些环境变量配置,可以参考后面的命令解析
构建镜像
- 执行命令
docker build -f Dockerfile -t 镜像地址:版本 .
推送远程
docker push 镜像地址:版本
命令解析
FROM
- 指定基础镜像,必须为第一个命令
格式:
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
示例:
FROM centos:7
注:
tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像
RUN
- 构建镜像时执行的命令
RUN用于在构建镜像时执行命令,其有以下两种命令执行方式:
shell执行
格式:
RUN <command>
exec执行
格式:
RUN ["executable", "param1", "param2"]
示例:
RUN apk update
RUN ["/etc/execfile", "arg1", "arg1"]
注:RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,
可以在构建时指定--no-cache参数,如:docker build --no-cache
ADD
- 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
格式:
ADD <src>... <dest>
ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
示例:
ADD hom* /mydir/ # 添加所有以"hom"开头的文件
ADD hom?.txt /mydir/ # ? 替代一个单字符,例如:"home.txt"
ADD test relativeDir/ # 添加 "test" 到 `WORKDIR`/relativeDir/
ADD test /absoluteDir/ # 添加 "test" 到 /absoluteDir/
COPY
- 类似ADD,但是是不会自动解压文件,也不能访问网络资源
CMD
- 构建镜像后调用,也就是在容器启动时才进行调用。
格式:
CMD ["executable","param1","param2"] (执行可执行文件,优先)
CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
CMD command param1 param2 (执行shell内部命令)
示例:
CMD echo "This is a test." | wc -l
CMD ["/usr/bin/wc","--help"]
注:CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
ENTRYPOINT
- 配置容器,使其可执行化。
格式:
ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
ENTRYPOINT command param1 param2 (shell内部命令)
示例:
FROM centos:7
ENTRYPOINT ["ls", "/usr/local"]
CMD ["/usr/local/tomcat"]
之后,docker run 传递的参数,都会先覆盖cmd,然后由cmd 传递给entrypoint ,做到灵活应用
注:
ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,
而docker run命令中指定的任何参数,都会被当做参数再次传递给CMD。
Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,
而只执行最后的ENTRYPOINT指令。
通常情况下, ENTRYPOINT 与CMD一起使用,ENTRYPOINT 写默认命令,当需要参数时候 使用CMD传参
LABEL
- 用于为镜像添加元数据
格式:
LABEL <key>=<value> <key>=<value> <key>=<value> ...
示例:
LABEL version="1.0" description="ssd硬盘" by="rundreamsFly"
注:
使用LABEL指定元数据时,一条LABEL指定可以指定一或多条元数据,指定多条元数据时不同元数据
之间通过空格分隔。推荐将所有的元数据通过一条LABEL指令指定,以免生成过多的中间镜像。
ENV
- 设置环境变量
格式:
ENV <key> <value> #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
ENV <key>=<value> ... #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,
如果<key>中包含空格,可以使用\\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
示例:
ENV myName Iversion
ENV myCat=demos
EXPOSE
- 指定于外界交互的端口
格式:
EXPOSE <port> [<port>...]
示例:
EXPOSE 80 443
EXPOSE 8080
EXPOSE 11211/tcp 11214/udp
注:
EXPOSE并不会让容器的端口访问到主机。要使其可访问,
需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口
如果没有暴露端口,后期也可以通过-p 8080:80方式映射端口,但是不能通过-P形式映射
VOLUME
- 指定持久化目录(指定此目录可以被挂载出去)
格式:
VOLUME ["/path/to/to"]
示例:
VOLUME ["/data"]
VOLUME ["/var/www", "/var/log/apache2", "/etc/apache/user"
注:一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能:
卷可以容器间共享和重用
容器并不一定要和其它容器共享卷
修改卷后会立即生效
对卷的修改不会对镜像产生影响
卷会一直存在,直到没有任何容器在使用它
WORKDIR
- 工作目录,类似于cd命令
格式:
WORKDIR /path/to/workdir
示例:
WORKDIR /a (这时工作目录为/a)
WORKDIR b (这时工作目录为/a/b)
WORKDIR c (这时工作目录为/a/b/c)
注:
通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY
等命令都会在该目录下执行。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。
ARG
- 相当于构建镜像时可以在外部为里面传参
格式:
ARG <name>[=<default value>]
示例:
ARG site
ARG build_user=www
From centos:7
ARG parameter
VOLUME /usr/share/nginx
RUN yum -y install $parameter
EXPOSE 80 443
CMD nginx -g "daemon off;"
# 可以这如下这样灵活传参
docker build --build-arg=parameter=net-tools -t nginx:1.14 .
一图汇总
其他信息
源码编译制作nginx镜像
# This my first nginx Dockerfile
# Version 1.0
# Base images 基础镜像
FROM centos
#MAINTAINER 维护者信息
MAINTAINER bertwu
#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#ADD 文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/
ADD epel-release-latest-7.noarch.rpm /usr/local/
#RUN 执行以下命令
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www
#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf
#EXPOSE 映射端口
EXPOSE 80
#CMD 运行以下命令
CMD ["nginx"]
以上是关于云原生 • DockerDocker常用命令总结(值得收藏)的主要内容,如果未能解决你的问题,请参考以下文章