docker的一些常用命令参考

简介: docker学习的一些基础笔记

第一板块:docker的一些基本操作指令
docker常用命令参考
docker pull 拉取镜像
docker run 启动容器
docker run -it 容器id 以交互式运行容器
docker run -d 容器id 后台运行容器
docker run -it -name 名称 为容器命名
docker run -it --rm 容器id 容器运行结束后,自动删除容器
docker ps 查看正在运行的容器
docker ps -a 查看全部容器信息(包括已停止的容器)
docker start 容器id 启动停止状态的容器
docker stop 容器id 停止运行中的容器
docker rm 容器id 删除容器
docker images 查看本地镜像信息
docker rmi 镜像id 删除本地镜像
docker inspect 镜像id 查看镜像分层信息
docker version 查看docker版本信息
docker info 查看docker使用信息

第二板块 dockerfile
dockerfile常用参数

参数 参数含义
FROM 拉取基础镜像
CMD 构建完成时执行的指令
RUN 构建时执行的shell命令
ARG 镜像层的环境变量
EVN 镜像层和容器层的环境变量
COPY 拷贝文件
ADD 拷贝文件、URL、压缩文件等
EXPOSE 暴露容器内部的端口给外部使用
dockerfile是一个纯文本,里面记录了一系列的构建指令。比如选择基础镜像、拷贝文件、运行脚本等等,每个指令都会生成一个layer,而docker顺序执行这个文件里的所有步骤,最后就会生成一个新的镜像出来。

简单dockerfile实例说明

# Dockerfiel.busybox
FROM busybox  选择基础镜像
CMD echo "hello world"  启动容器时默认运行的命令

上述文件只里有两条指令,第一条指令是FROM,所有的dockerfile都要从它开始,表示选择构建使用的基础镜像,这里使用的是busybox。
第二条是CMD,它指定docker run启动容器时默认运行的命令,这里使用了echo命令,输出“hello world”字符串。

这里使用docker build 命令来创建出镜像:

docker build -f Dockerfile.busybox .

需要注意命令的格式,这里使用了-f参数指定dockerfile的文件名,后面必须跟一个文件路径,叫做“构建上下文”(build’s context),这里只是一个简单的点号,表示当前路径的意思。
接下来,就会看到docker会逐行的读取并执行dockerfile里的指令,依次创建镜像层,在生成完整的镜像。
这种方式构建出来的镜像是没有名称的,可以添加 -t 参数指定镜像的标签,名称必须符合规则,用 : 分隔名字和标签,若不提供标签,默认就是latest。

需要了解的是只有RUN、ADD、COPY 会生成镜像层,其他指令会生成临时的镜像层。
所以dockerfile里的指令要精简合并,否则太多的层会导致镜像臃肿不堪。

怎样编写正确、高效的dockerfile
因为构建镜像的第一条指令必须是 FROM ,所以基础镜像的选择尤为重要,如果关注的是镜像的安全和大小,那么一般会选择alpine,如果关注的是应用的运行稳定性,那么可能会选择ubuntu、centos等。
我们在本机测试时上开发测试时,会产生一些源码、配置等文件,需要打包进镜像里,这时可以使用 COPY 命令,用法和linux系统的cp差不多,不过拷贝的源文件必须是“构建上下文”路径里的,不能随意指定文件。
COPY 命令示例:

COPY ./a.txt /tmp/a.txt  #把构建上下文里的a.txt拷贝到镜像的/tmp目录下。
COPY /etc/hosts /tmp  #执行报错,不能使用构建上下文路径之外的文件拷贝。

当上传的目录下文件较多(有部分文件不需要进行拷贝时)也会导致构建效率较低,为了解决这个问题,可以在构建上下文的目录里创建一个 .dockerignore 文件,排除那些不需要的文件。
下面是一个简单的示例,表示不打包上传后缀为swp、sh的文件。

# docker ignore
*.swp
*.sh

接下来要学习的时dockerfile中的 RUN 指令,它可以执行任意的shell命令,比如更新系统、安装应用、下载文件、创建目录等,实现任意的镜像构建步骤,非常灵活。
RUN 通常是dockerfile里最复杂的指令,会包含很多shell命令,dockerfile里的一条指令只能是一行,所有有的 RUN 指令会在每行的末尾使用续航符 \ ,命令之间也会用 && 来连接,这样会保证在逻辑上是一行,就像下面这样:

RUN apt-get update \
    && apt-get install -y \
        build-essential \
        curl \
        make \
        unzip \
    && cd /tmp \
    && curl -fSL xxx.tar.gz -o xxx.tar.gz \
    && tar xzf xxx.tar.gz \
    && cd *** \
    && ./config \
    && make \
    && make install

这种超长的指令写起来不美观,同时出错也不易排查,所以会用到变通的技巧,把这些shell命令集中写入到一个脚本里,用 COPY 命令拷贝进去在使用RUN来执行。

COPY set.sh /tmp/
RUN cd /tmp && chmod +x set.sh \
    && ./set.sh \
    && rm set.py

接下来我们需要了解dockerfile里的变量,这里需要使用 ARG 和 ENV 。
它们的却别是 ARG 创建的变量只在镜像构建中可见,容器运行时不可见,而 ENV 创建的变量,不仅能够在构建镜像的过程中使用,在容器运行时也能够以环境变量的形式被应用程序使用。
下面是一个简单的例子,使用了 ARG 定义了基础镜像的名字(可以用在“FROM”指令里),使用 EVN 定义了两个环境变量。

ARG IMAGE_BASE="node"
ARG IMAGE_TAG="alpine"

EVN PATH==$PATH:/tmp
EVN DEBUG=OFF

还有一个重要的指令是 EXPOSE ,它的作用是声明容器对外服务的端口号,对现在基于node.js、tomcat、nginx等开发的微服务系统来说非常有用:

EXPOSR 443  #默认是tcp协议
EXPOSE 53/udp  #指定udp协议
完整示例
# dockerfile
# docker build -t ngx-app .
# docker build -t ngx-app:1.0 .

ARG IMAGE_BASE="nginx"
ARG IMAGE_TAG="1.21-alpine"

FROM ${IMAGE_BASE}:${IMAGE_TAG}

COPY ./default.conf /etc/nginx/conf.d/

RUN cd /usr/share/nginx/html \
    && echo "hello nginx" > a.txt

EXPOSE 8081 8082 8083
相关文章
|
4月前
|
存储 Java Linux
【Docker】(2)还在浏览网页寻找Docker命令?本文全面列举与使用Docker里的各个命令!想要什么命令直接从本文拿!
docker有着比VM更少的抽象层 由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源 因此在CPU、内存利用率上Docker将会在效率上有明显优势 docker利用的时宿主机的内核,而不需要加载操作系统OS内核 当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核 进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程时分钟级别的。 而Docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个Docker容器只需
495 124
|
7月前
|
安全 Unix Linux
Docker中授权普通用户使用docker命令以及解决无权限访问/var/run/docker.sock错误。
通过上述步骤,可以有效解决普通用户无法使用Docker命令的问题,同时处理 `/var/run/docker.sock`权限错误。这样的设置不仅方便用户使用Docker提供的各项服务,同时还能保护系统的安全性。在进行此类配置更改时,请确保理解每一步骤的作用及潜在的安全风险,尤其是在修改文件权限时。在实际的操作中,始终应该努力保持系统的最低必要权限,避免过度放宽权限,这是保障系统安全的一个重要方针。
2331 75
|
8月前
|
Docker 容器
Docker run命令-p参数详解
本文介绍Docker端口映射的基础用法。通过`docker run -p <宿主机端口>:<容器端口>`实现端口映射,例如`-p 5000:80`将宿主机5000端口映射到容器80端口,外部访问宿主机5000端口时流量会转发至容器内部的80端口。示例命令中,`-d`用于后台运行,`--restart=always`确保容器自动重启,`--name`指定容器名称。部署完成后可通过`http://服务器IP地址:5000`验证服务是否正常运行。
1131 57
|
9月前
|
网络协议 Ubuntu Docker
Docker Compose--命令说明
Docker Compose--命令说明
1655 30
|
7月前
|
Docker 容器
熟悉Docker容器管理命令:start、stop与restart详细使用指南
掌握这些Docker容器管理命令对于维护应用程序的正常运行至关重要。在实际操作中,应注意容器配置、关联资源以及日志等信息,确保各项操作都能够顺畅并且安全地执行。
1255 0
|
9月前
|
Ubuntu Linux 开发者
常用的Docker命令:docker_cmd_sheet
以上就是一些常用的Docker命令,希望能帮助你更好地驾驭这个强大的工具。记住,Docker就像是一个魔法咒语,只有真正理解和熟练使用,才能发挥出它的最大魔力。
210 22
|
9月前
|
Shell 应用服务中间件 nginx
docker 镜像的部分常用命令
docker镜像常用命令
281 16
|
9月前
|
关系型数据库 MySQL Docker
|
9月前
|
关系型数据库 MySQL 数据库
Docker 安装常用软件相关命令
本文介绍了在CentOS 7.9系统上安装Docker的详细步骤,包括添加阿里云镜像源、安装Docker及相关组件、启动服务以及配置镜像加速。同时,还展示了如何通过Docker安装MySQL 5.7版本数据库,涵盖拉取镜像、创建数据目录、运行容器及配置挂载点等操作,并提供验证安装成功的命令和截图。适合需要部署Docker与MySQL环境的用户参考。
499 5
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
480 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解