GVKun编程网logo

Docker 常用指令(docker常用指令)

23

本篇文章给大家谈谈Docker常用指令,以及docker常用指令的知识点,同时本文还将给你拓展14-Dockerfile常用指令、Docker-01常用指令、参数配置速查表、docker-Docke

本篇文章给大家谈谈Docker 常用指令,以及docker常用指令的知识点,同时本文还将给你拓展14-Dockerfile常用指令、Docker - 01 常用指令、参数配置速查表、docker - Dockerfile 常用指令、Docker - 初学实用指令记录等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Docker 常用指令(docker常用指令)

Docker 常用指令(docker常用指令)

查看信息
docker ps -a   查看当前所有容器状态
docker images  查看当前系统中可用的镜像,注意在使用时,需加:tag  除非你想使用最新的镜像 latest
docker logs -f [container_name|container_id] 跟踪日志类似于 tail -f 

删除容器
docker rm [container_name|id] 删除已停止的容器,如果想要强制删除未停止的容器,可加 - f
    也可以 docker rm `docker ps -a -q` 删除所有已停止的容器
docker rm contained_id1 contained_id2...  删除多个已停止的容器

删除镜像
docker rmi [image_name|id] 删除镜像

启动一个容器
docker run -ti [image_name|id] [要执行的非守护进程的命令]   -ti 前台进行
    例如:docker run -it -p 8080:8080 tomcat-test:v1 /bin/bash
docker run -d  [image_name|id] [要执行的非守护进程的命令]   -d  后台进行
    例如:docker run -d -p 8080:8080 tomcat-test:v1 /root/run.sh

执行也已启动的容器(类似上面)
docker exec -ti [已运行的容器名或 id] [要执行的非守护进程的命令]   -ti 前台进行
docker exec -d  [已运行的容器名或 id] [要执行的非守护进程的命令]   -d  后台进行

启停容器
docker start [已停止的容器名字或 id]
docker stop  [已启动的容器名字或 id]

启动容器的用法及说明
docker run [--name String] [-v localpath:containerpath] --privileged=true [-p port [:port]]-d  [image_name|id] [要执行的非守护进程的命令]   -d  后台进行
    --name                为要启动的容器命名
    -v localpath:containerpath    为容器挂载一个文件,譬如把容器内的程序日志挂载出来,方便查看
    -d                运行的容器后台运行
    -ti                运行的容器前台运行
    -p [port] 或 [port:port]    为容器内的服务映射端口,影射后可以通过访问系统对应端口访问容器内的服务
    --privileged=true 给容器加文件权限

docker 互相拷贝文件
docker cp local_path/local_file:container_name/container_path/container_file
    例如:docker cp /opt/soft/tomcat/apache-tomcat 234dsdsf:/opt/soft/tomcat/
docker cp container_name/container_path/container_file:local_path/local_file

docker pull 镜像
拉取仓库中的某个镜像,默认拉取最新版,也可以指定 tag

docker commit [已停止的容器] [镜像名字]   将已做修改 (且已停止) 的容器重新提交为镜像

docker save -o tomcat-test_v1.tar tomcat-test:v1    存出镜像到本地文件
docker load --input tomcat-test_v1.tar    载入本地文件到本地镜像库

 

参看书籍:

《Spring Cloud 与 Docker 微服务架构实战》 的 Docker 部分

《Docker 技术入门和实战》

14-Dockerfile常用指令

14-Dockerfile常用指令

下面列出了 Dockerfile 中最常用的指令,完整列表和说明可参看官方文档。
FROM

指定 base 镜像。

MAINTAINER
设置镜像的作者,可以是任意字符串。

COPY
将文件从 build context 复制到镜像。
COPY 支持两种形式:

  1. COPY src dest

  2. COPY ["src", "dest"]

注意:src 只能指定 build context 中的文件或目录。

ADD
与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会被自动解压到 dest。

ENV
设置环境变量,环境变量可被后面的指令使用。例如:

...

ENV MY_VERSION 1.3

RUN apt-get install -y mypackage=$MY_VERSION

...

EXPOSE

指定容器中的进程会监听某个端口,Docker 可以将该端口暴露出来。我们会在容器网络部分详细讨论。

VOLUME
将文件或目录声明为 volume。我们会在容器存储部分详细讨论。

WORKDIR
为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。

RUN
在容器中运行指定的命令。

CMD
容器启动时运行指定的命令。
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效。CMD 可以被 docker run 之后的参数替换。

ENTRYPOINT
设置容器启动时运行的命令。
Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT。

下面我们来看一个较为全面的 Dockerfile:

注:Dockerfile 支持以“#”开头的注释。

构建镜像:

① 构建前确保 build context 中存在需要的文件。

② 依次执行 Dockerfile 指令,完成构建。

运行容器,验证镜像内容:

① 进入容器,当前目录即为 WORKDIR。
如果 WORKDIR 不存在,Docker 会自动为我们创建。

② WORKDIR 中保存了我们希望的文件和目录:
目录 etc:由 ADD 指令从 build context 复制的归档文件 etc.tar.gz,已经自动解压。
文件 tmpfile1:由 RUN 指令创建。
文件 tmpfile2:由 COPY 指令从 build context 复制。

③ ENV 指令定义的环境变量已经生效。

Docker - 01 常用指令、参数配置速查表

Docker - 01 常用指令、参数配置速查表

docker

目录

  • 01 Docker 常用指令、参数配置速查表
  • 02 Dockerfile 指令速查表
  • 03 Docker Compose 指令速查表

Docker - 01 常用指令、参数配置速查表

Centos7 安装 Docker

阿里镜像安装

官方repo地址被墙,所以我用阿里

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo systemctl start docker

加速

国内镜像慢,所以我用阿里

sudo mkdir -p /etc/docker
sudo vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
  • 使用镜像加速器
  • 加速器地址

命令速查表

常用度排序

镜像操作

功能 命令
拉取镜像 docker pull [镜像名称:版本]
镜像列表 docker images
删除镜像 docker rmi [镜像名称:版本]
镜像操作记录 docker history [镜像名称:版本]
给镜像设置新的仓库 docker tag [镜像名称:版本] [新镜像名称:新版本]
查看镜像详细 docker inspect [镜像名称:版本]
搜索镜像 docker search [关键字]
仓库登录 docker login
docker tag 指令得到了一个新的,和原来的镜像一模一样的镜像。后续文谈到私仓非常有用。

容器操作

功能 命令
启动容器并进入 docker run -ti --name [容器名称] [镜像名称:版本] bash
容器列表 docker ps -a
容器提交为新的镜像 docker commit [容器名称] my_image:v1.0
容器后台运行 docker run -d --name [容器名称] [镜像名称:版本] bash -c "echo hello world"
容器结束后自动删除 docker run --rm --name [容器名称] [镜像名称:版本] bash -c "echo hello world"
删除容器 docker rm [容器名称]
进入容器 exec docker exec -ti [容器名称] bash
进入容器 attach docker attach [容器名称]
停止容器 docker stop [容器名称]
Docker 日志 docker logs [容器名称]
查看容器详细 docker inspect [容器名称]
查看容器最近一个进程 docker top [容器名称]
继续运行被停止的容器 docker restart [容器名称]
暂停一个容器进程 docker pause [容器名称]
取消暂停 docker unpause [容器名称]
终止容器 docker kill [容器名称]
端口映射 docker run -ti --name [容器名称] -p 8080:80 [镜像名称:版本] bash
容器互联 docker run -ti --name [容器名称] --link [被互联容器名称]:[容器内名称] net:v1.0 bash
复制容器文件到宿主 docker cp [容器名称]:[容器内目录] .
  • execattach 区别
在 exec 里面执行 exit 命令,你只是关掉了 exec 命令新开的进程,而主进程依旧在运行,所以容器并不会停止
在 attach 里面运行 exit 命令,你实际是终止了主进程,所以容器也就随之被停止了
  • -p 配置
-p hostPort:containerPort 映射所有 IP 地址上的指定端口到容器内部
-p ip:hostPort:containerPort 映射指定 IP 地址上的指定端口到容器内部
-p ip::containerPort 映射指定 IP 地址上的任意端口到容器内部

内存限制

参数 简介
-m, - -memory 内存限制,格式:数字+单位,单位可以是b, k, m, g,最小4M
-- -memory-swap 内存和交换空间总大小限制,注意:必须比-m参数大

CPU限制

参数 简介
-- -cpuset-cpus="" 允许使用的CPU集
-c,- -cpu-shares=0 CPU共享权值
-- -cpu-quota=0 限制CPU CFS配额,必须不小于1ms,即>=1000
cpu-period=0 限制CPU CFS调度周期,范围是100ms~1s,即[1000, 1000000]
sudo docker run -ti --cpuset-cpus="1,3" --name cpuset [镜像名称:版本] bash
比如下面的指令指定容器进程可以在 CPU1 和 CPU3 上运行

数据卷

功能 命令
创建一个卷 docker run -ti --name [容器名称] -v /[数据卷名称] [镜像名称:版本] bash
删除一个数据卷 docker rm -v [数据卷名称]
挂载宿主目录 docker run -ti --name [容器名称] -v [宿主目录]:[容器内目录] [镜像名称:版本] bash
数据卷容器 docker run -ti -d -v /[数据卷名称] --name [数据卷容器名称] [镜像名称:版本]
使用数据卷容器 docker run -ti --volumes-from [数据卷容器名称] --name [新容器名称] [镜像名称:版本] bash
清除所有 docker volume prune
备份数据卷 1 - 建立容器 docker run -it --name vol_simple -v /data ubuntu /bin/bash
备份数据卷 2 - 备份 docker run --rm --vloumes-from vol_simple -v$(pwd):/backup ubuntu tar cvf /backup/data.tar /data
恢复数据卷 1 - 建立目标容器 docker run -it --name vol_bck -v /data ubuntu /bin/bash
恢复数据卷 2 - 解压 docker run --rm --volumes-from vol_bck -v $(pwd):/backup ubuntu tar xvf /backup/data.tar -C /
备份数据卷: 指令启动了一个临时的容器,这个容器挂载了两个volume,第一个volume与要备份的volume共享,第二个volume将宿主机的当前目录挂载到容器的/backup下。容器运行后将要备份的内容(/data文件夹)备份到/backup/data.tar,然后删除容器,备份后的data.tar就留在了当前目录。

恢复数据卷: 首先运行了一个新容器作为数据恢复的目标。第二行指令启动了一个临时容器,这个容器挂载了两个volume,第一个volume与要恢复的volume共享,第二个将宿主机的当前目录挂载到容器的/backup下。由于之前备份的data.tar在当前目录下,那么它在容器中的/backup也能访问到,容器启动后将这个存档文件中的/data恢复到跟目录下,然后删除容器,恢复后的数据在vol_bck的volume中了。

参考

  • docker
  • docker-cn

© 会煮咖啡的猫咪

docker - Dockerfile 常用指令

docker - Dockerfile 常用指令

FROM

指定 base images

FROM centos:7.4.1708

MAINTAINER

设置镜像的作者

MAINTAINER work.hugo.huang@gmail.com

我们设置了镜像的作者后,可以通过 docker inspect 命令查看镜像的信息,里面包含有作者信息。

[root@localhost dockerfile-instruction]# docker inspect c89334650819
[
    {
       
        "DockerVersion": "18.03.1-ce",
        "Author": "work.hugo.huang@gmail.com",
        ...忽略其它信息
        "Metadata": {
            "LastTagTime": "2018-11-12T22:05:51.772312473+08:00"
        }
    }
]

COPY

复制本地主机的 src 到容器中的 dest ,src 必须在上下文中,一般情况下,将本地主机的一个包含 Dockerfile 的目录中的所有内容作为上下文,如 docker/install。当使用本地目录为源目录时,推荐使用 COPY 。

下面的 /root/dockerfile-instruction 是 build context

COPY /root/dockerfile-instruction/install /app/install

ADD

与 COPY 类似,不同的是,如果 src 的文件是 identity, gzip, bzip2,xz,tar.gz,tgz 等类型的文件将被添加 tar -x 命令,进行解压

 

EXPOSE

向外界暴露端口。这样就可以通过容器的 ip 地址 + port 访问到容器

在这里,我们不得不提 docker run 命令中的 -p 参数。docker run 中的 - p 参数是对容器中的端口映射到 host 端口中,这样我们既可以通过容器的 ip 地址 + port 访问,也可以通过 host 的 IP + 端口访问到容器中的服务。

举个例子:

有一个 helloworld 的 springboot 服务,写了一个 dockerfile 文件,暴露了 8080 端口

FROM openjdk:8u181-jdk-alpine
VOLUME /app/springboot-docker
ADD springboot-docker-1.0.jar /app/springboot-docker/app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/springboot-docker/app.jar"]

当我们通过 dockerfile 构建镜像并通过命令运行后

docker run -d --name springboot-docker springboot-docker

我们可以通过以下命令获取到容器的 IP 地址

docker inspect springboot-docker

这时,我们可以通过下面的命令访问到服务,172.17.0.2 是该容器的 IP

curl 172.17.0.2:8080/home

 

CMD

容器启动时运行指定的命令,CMD 指令支持的格式

  • CMD ["executable","param1","param2"] 。推荐格式 
  • CMD ["param1","param2"] 。为 ENTRYPOINT 指令提供参数,此时的 ENTRYPOINT 指令需要使用 Exec 格式。其用途是为 ENTRYPOINT 指令设置默认的参数
  • CMD command param1 param2 。执行 shell 内部命令

每个 Dockerfile 最多只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户通过 dcoker run 命令启动容器,将会覆盖掉 CMD 指定的参数代替。

下面以格式(1)距离说明,格式(2)将在 ENTRYPOINT 指令中举栗子。

Dockerfile 如下,最后一行加入了 CMD 命令

FROM centos:7.4.1708
MAINTAINER work.hugo.huang@gmail.com
CMD ["/bin/bash","-c","echo hello,docker"]

当我们运行该容器时,它会马上运行最后的命令。

[root@localhost dockerfile-instruction]# docker run -it dockerfile-instruction
hello,docker

如果通过下面的命令运行 docker,则 CMD 参数会被替代

[root@localhost dockerfile-instruction]# docker run -it dockerfile-instruction echo bye
bye

 

ENV

设置环境变量,它可作用的其它指令:

  • ADD
  • COPY
  • ENV
  • EXPOSE
  • FROM
  • LABEL
  • STOPSIGNAL
  • USER
  • VOLUME
  • WORKDIR

也就是说,在这些指令中,可以通过 ${ENV_VALUE} 替换

WORKDIR

设置工作目录,设置了工作目录,它将会作用于该指令后面的 RUNCMDENTRYPOINTCOPY , ADD 指令。

 

 

 

 

 

Docker - 初学实用指令记录

Docker - 初学实用指令记录

docker pull image_name:tags - 获取镜像

docker run -it image_name:tags [Command] - 进入镜像

exit - 退出镜像

docker image ls - 查看镜像

  仓库名标签镜像 ID创建时间 以及 所占用的空间

docker system df - 查看镜像、容器、数据卷所占用的空间

docker image ls -a - 中间层镜像

docker exec -it webserver bash - 进入容器

docker run --name NEW_NAME -d -p 服务器端口:容器端口 镜像

 

关于Docker 常用指令docker常用指令的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于14-Dockerfile常用指令、Docker - 01 常用指令、参数配置速查表、docker - Dockerfile 常用指令、Docker - 初学实用指令记录的相关信息,请在本站寻找。

本文标签: