20221130 Docker 1. 快速入门 - 安装、常用指令

参考资料

前言

2020 年学习了一套尚硅谷的 Docker 视频教程,基本的命令和概念都是了解的。在 2021 年报班拉勾教育又学习了一遍 Docker ,发现尚硅谷的视频教程有些知识缺漏,又因为懒,一直没有自己总结拉勾教育的 Docker 视频,一直留了尾巴,今天进行收尾。

在工作中用到 Docker 和 k8s 也越来越多,切身体会到了便利

容器化在工作中也会是一个趋势

视频时间

版本信息

官网最新版本:

视频版本:

练习版本:20.10.7

[root@VM-72-146-centos ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        f0df350
 Built:             Wed Jun  2 11:58:10 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       b0f5bc3
  Built:            Wed Jun  2 11:56:35 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.8
  GitCommit:        7eba5930496d9bbe375fdf71603e610ad737d2b2
 runc:
  Version:          1.0.0
  GitCommit:        v1.0.0-0-g84113ee
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

docker-compose 版本:v2.11.2

Docker 安装

Install Docker Engine on CentOS | Docker Documentation

yum list docker-ce

# 安装最新版:推荐大家安装最新版本
yum -y install docker-ce
systemctl start docker
systemctl status docker
systemctl enable docker
# 查看版本
docker version

配置镜像加速

vim /etc/docker/daemon.json

{
  "registry-mirrors": [
              "https://mirror.ccs.tencentyun.com",
              "https://hub-mirror.c.163.com",
            "https://mirror.baidubce.com"
        ]
}
systemctl daemon-reload
systemctl restart docker

docker-compse

网络下载

curl -L https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-linux-x86_64 > /usr/local/bin/docker-compose

或通过已下载的文件上传

mv docker-compose /usr/local/bin/

chmod +x /usr/local/bin/docker-compose

# 查看版本信息
docker-compose --version

Docker 介绍

2014年6月9日,Docker 1.0发布!1.0版本的发布,标志着 Docker 平台已经足够成熟稳定,并可以被应用到生产环境。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),本教程使用社区版(CE)

帮助指令

docker --help

查看 Docker 版本

docker -v
docker version

Docker 系统范围信息

docker info

Docker 命令分类

  • Docker 环境信息:docker [info|version]

  • 容器生命周期管理:docker [create|exec|run|start|stop|restart|kill|rm|pause|unpause]

  • 容器操作管理:docker [ps|inspect|top|attach|wait|export|port|rename|stat]

  • 容器rootfs命令:docker [commit|cp|diff]

  • 镜像仓库:docker [login|pull|push|search]

  • 本地镜像管理:docker [build|images|rmi|tag|save|import|load]

  • 容器资源管理:docker [volume|network]

  • 系统日志信息:docker [events|history|logs]

资源清理

删除已停止的容器、dangling 镜像、未被容器引用的 network 和 dangling 构建过程中的 cache

docker system prune

清理镜像

docker image prune

# 删除所有的镜像
docker rmi $(docker images -q)

清理容器

# 清理已经停止运行的docker容器
docker rm $(docker ps --all -q -f status=exited)

# 停止所有运行容器
docker stop $(docker ps -aq)

# 删除所有的容器
docker rm $(docker ps -aq)

# 停止并删除所有的容器
docker rm $(docker stop $(docker ps -q))

常用命令总结

Docker 镜像

镜像可以理解为一种构建时(build-time)结构,而容器可以理解为一种运行时(run-time)结构

一个镜像一般是由多个层组成

不同仓库中,可能也会存在镜像重名的情况发生, 这种情况咋办?

从严格意义上讲,我们在使用 pull命令时,还需要在镜像前面指定仓库地址(Registry), 如果不指定,则 Docker 会使用您默认配置的仓库地址。例如上面,由于我配置的是国内 docker.io的仓库地址,我在 pull 的时候,docker 会默认为我加上 docker.io/library 的前缀。

例如:当我执行 docker pull tomcat:9.0.20-jre8 命令时,实际上相当于 docker pull docker.io/tomcat:9.0.20-jre8,如果您未自定义配置仓库,则默认在下载的时候,会在镜像前面加上 DockerHub 的地址。Docker 通过前缀地址的不同,来保证不同仓库中,重名镜像的唯一性。

命令

save

docker save tomcat:9.0.20-jre8-alpine -o tomcat9.tar
docker save tomcat:9.0.20-jre8-slim > tomcat9.slim.tar

-o :指定输出到的文件

# 保存多个镜像
docker save \
tomcat:9.0.20-jre8-alpine \
tomcat:9.0.20-jre8-slim \
tomcat:9.0.20-jre8 \
-o tomcat9.0.20.tar

load

docker load -i linux.tar
docker load < tomcat9.0.20.tar
  • --input , -i : 指定导入的文件。

  • --quiet , -q : 精简输出信息。

inspect

通过 docker inspect 命令,我们可以获取镜像的详细信息,其中,包括创建者,各层的数字摘要等。

docker inspect 返回的是 JSON格式的信息,如果您想获取其中指定的一项内容,可以通过 -f 来指定,如获取镜像大小

也可以用于容器

docker inspect tomcat:9.0.20-jre8-alpine

docker inspect -f {{".Size"}} tomcat:9.0.20-jre8-alpine

history

列出各个层的创建信息

docker history tomcat:9.0.20-jre8-alpine

commit

从容器创建一个新的镜像

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  • -a :提交的镜像作者
  • -c :使用 Dockerfile 指令来创建镜像
  • -m :提交时的说明文字
  • -p :在commit时,将容器暂停
docker container commit -m "update index.html file" -a "laosiji" lagou-nginx lagouedu/nginx:v2

build

使用 Dockerfile 创建镜像

docker build [OPTIONS] PATH | URL | -
  • --build-arg=[] :设置镜像创建时的变量;

  • -f :指定要使用的Dockerfile路径;

  • --rm :设置镜像成功后删除中间容器;

  • --tag , -t :镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

Docker 容器

可以把容器看做是一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。

容器是基于镜像启动起来的,容 器中可以运行一个或多个进程。

镜像是Docker生命周期中的构建或打包阶段,而容器则是启动或执行阶段。

镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。

命令

cp

用于容器与主机之间的数据拷贝

# 宿主机文件复制到容器内
docker cp [OPTIONS]   SRC_PATH   CONTAINER:DEST_PATH

# 容器内文件复制到宿主机
docker cp [OPTIONS]   CONTAINER:SRC_PATH   DEST_PATH
  • -L :保持源目标中的链接
docker run -itd --name nginx -p 80:80 nginx:1.19.3-alpine

# 宿主机的index.html页面覆盖容器内的index.html页面
docker cp /data/index.html nginx:/usr/share/nginx/html/index.html

# 将容器内的nginx.cnf复制到宿主机中
docker cp nginx:/etc/nginx/nginx.conf /data

run

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run -it --rm -p 8080:8080 tomcat:9.0.20-jre8-alpine
  • -d, --detach=false: 后台运行容器,并返回容器ID

  • -i, --interactive=false: 以交互模式运行容器,通常与 -t 同时使用

  • -P, --publish-all=false: 随机端口映射,容器内部端口随机映射到主机的端口。不推荐各位小伙伴使用该参数

  • -p, --publish=[]: 指定端口映射,格式为:主机(宿主)端口:容器端口,推荐各位小伙伴们使用

  • -t, --tty=false: 为容器重新分配一个伪输入终端,通常与 -i 同时使用

  • --name="nginx-lb": 为容器指定一个名称

  • -h , --hostname="laosiji": 指定容器的hostname

  • -e , --env=[]: 设置环境变量,容器中可以使用该环境变量

  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型

  • --link=[]: 添加链接到另一个容器;不推荐各位小伙伴使用该参数

  • -v, --volume : 绑定一个卷

  • --privileged=false: 指定容器是否为特权容器,特权容器拥有所有的 capabilities

  • --restart=no:指定容器停止后的重启策略

    • no:容器退出时不重启

    • on-failure:容器故障退出(返回值非零)时重启

    • always:容器退出时总是重启,推荐各位小伙伴们使用

  • --rm=false: 指定容器停止后自动删除容器,不能以docker run -d启动的容器

create

创建一个新的容器但不启动它。

用法同 docker run命令。

docker create -it --name tomcat9 -p 8080:8080 9.0.20-jre8-alpine

logs

获取容器的日志

docker logs [OPTIONS] CONTAINER
docker logs -f tomcat9
  • -f:跟踪日志输出

  • --tail:仅列出最新N条容器日志

ps

docker ps [OPTIONS]
# 查看运行中的容器
docker ps tomcat9

# 查看所有容器
docker ps -a tomcat9

输出详情介绍:

  • CONTAINER ID: 容器 ID

  • IMAGE: 使用的镜像

  • COMMAND: 启动容器时运行的命令

  • CREATED: 容器的创建时间

  • STATUS: 容器状态

  • PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

  • NAMES: 自动分配的容器名称。

STATUS: 容器状态有7种:

  • created(已创建)

  • restarting(重启中)

  • running(运行中)

  • removing(迁移中)

  • paused(暂停)

  • exited(停止)

  • dead(死亡)

start、stop、restart

docker start tomcat9
docker stop tomcat9
docker restart tomcat9

exec

在运行的容器中执行命令。早期有 attach 命令,对于阻塞命令会等待,所以不方便。在 Docker 1.3.0 后提供了exec 可以在容器内直接执行任意命令

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -it tomcat9.1 /bin/bash
docker exec -it tomcat9.2 sh
  • -i:即使没有附加也保持 STDIN 打开

  • -t:分配一个伪终端

inspect

docker inspect tomcat9

kill

强制停止一个运行中的容器

docker kill tomcat9

-s:向容器发送一个信号

IDEA 集成 Docker

修改 Docker 配置

vim /usr/lib/systemd/system/docker.service

# 在ExecStart行最后增加,开放远程主机访问权限
-H tcp://0.0.0.0:2375
# 最后增加修改内容如下:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375

# 重启docker
systemctl daemon-reload
systemctl restart docker
# 查看docker进程,发现docker守护进程在已经监听2375的tcp端口
ps -ef | grep docker

# 查看系统的网络端口,检查tcp的2375端口,docker的守护进程是否监听
netstat -tulp | grep 2375

修改 IDEA 配置

设置 -> 构建、执行、部署 -> Docker -> +

新增 docker 服务器配置信息

配置内容如下:

name: Docker-DevCloud
TCP Socket:
    Engine API URL: tcp://9.134.72.146:2375

配置成功后,会在idea开发工具下方窗口"8.services"里显示信息,右键点击connect。连接成功可以查

看到container和images等信息。可以对container和images进行各种相关操作。

posted @ 2022-12-03 20:05  流星<。)#)))≦  阅读(74)  评论(0编辑  收藏  举报