GVKun编程网logo

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

17

想了解docker常用指令的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于docker常用指令的相关问题,此外,我们还将为您介绍关于14-Dockerfile常用指令、Docker-01常

想了解docker 常用指令的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于docker常用指令的相关问题,此外,我们还将为您介绍关于14-Dockerfile常用指令、Docker - 01 常用指令、参数配置速查表、docker - Dockerfile 常用指令、Docker - 初学实用指令记录的新知识。

本文目录一览:

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

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

1、查看 docker 信息

docker system df

2、删除镜像

docker rmi -- 删除镜像

docker image prune -- 删除虚悬镜像

3、守护态运行

docker run -p 8080:8080 -d tomcat

-- 容器起名字

docker run -p 8081:8080 --name tomcat -d tomcat

4、删除容器

docker rm -f 4165845d34e0

docker container prune 一次删除所有的已停止的容器

5、进入容器

docker exec -it 4165845d34e0 /bin/bash

6、定制镜像

6.1、简单应用

创建 Dockerfile 文件名

---------- 编写 Dockerfile

FROM tomcat:latest

COPY index.jsp /usr/local/tomcat/webapps/ROOT

--------- 编译镜像

docker build -t myshop .

-- -t 表示镜像名称 

-- . 表示在当前目录下使用 Dockerfile 编译镜像,且指定当前目录为 “上下文”,上下文非常重要

===== 编译原理,1. 打包上下文,传输到 docker server;2.docker server 使用 Dockerfile 和传输上来的上下文构建出镜像

 

6.2、Dockerfile 的其他命令

CMD -- 执行命令,只能使用一次

ENTRYPOINT -- 执行命令,只能使用一次

EVN -- 定义环境变量

EXPOSE 8080 3306 -- 开发端口

volume -- 定义数据卷

WORKDIR -- 类似于 CD, 进入一个目录 (切换目录),docker exec -it myshop /bin/bash 会改变交互式运行时,进去后直接定位的工作目录

7、docker compose, 容器编排环境

======= 简单的例子

version: ''3.1''

services: 

    tomcat:

        restart: always

        image: tomcat

        container_name: tomcat

        ports:

            - 8080:8080

============= 执行

docker-compose up -d

docker-compose down

 

8、部署 mysql 的 docker-compose.yml

version: ''3.1''
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql
  adminer:
    image: adminer
    restart: always
    ports:
     -  8083:8080

9、部署 tomcat 的 docker-compose.yml

version: ''3.1''
services: 
    tomcat:
        restart: always
        image: tomcat
        container_name: tomcat
        ports:
            - 8080:8080
        volumes:
            - ./webapps:/usr/local/tomcat/webapps
        environment:
            TZ: Asia/Shanghai

 

 

 

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 - 初学实用指令记录的相关知识,请在本站搜索。

本文标签: