Docker / 云计算

Docker基本知识学习教程

温馨提示:本文最后更新于2022-02-28 20:29:48,某些文章具有时效性,若有错误或已失效,请在下方留言或提交工单提交工单
浅时光 · 2月28日 · 2022年 本文7711个字,预计阅读20分钟 6497次已读

Docker基础命令使用


查看Docker版本

[root@localhost ~]# docker version
Client: Docker Engine – Community	#docker客户端
 Version:           20.10.12		#客户端版本号
 API version:       1.41			#API版本号
 Go version:        go1.16.12		#使用的Go版本
 Git commit:        e91ed57		#此次版本提交的commit ID
 Built:             Mon Dec 13 11:45:41 2021
 OS/Arch:           linux/amd64		#系统架构
 Context:           default
 Experimental:      true

Server: Docker Engine – Community	#Server引擎端
 Engine:
  Version:          20.10.12
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.12
  Git commit:       459d0df
  Built:            Mon Dec 13 11:44:05 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:				#containder信息
  Version:          1.4.12		#containder版本
  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:					#docker引擎,核心组件
  Version:          1.0.2		#版本号
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

查看Docker信息

[root@localhost ~]# docker info
Client:		#客户端信息
 Context:    default
 Debug Mode: false	#Debug模式管理
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.7.1-docker)
  scan: Docker Scan (Docker Inc., v0.12.0)

Server:		#服务端信息
 Containers: 0	#当前宿主机上有多少个容器
  Running: 0	#当前宿主机上运行的容器数量
  Paused: 0	#当前宿主机上暂停的容器数量
  Stopped: 0	#当前宿主机上停止的容器数量
 Images: 0	#当前宿主机上有多少个镜像
 Server Version: 20.10.12
 Storage Driver: overlay2	#使用的存储驱动,overlay2
  Backing Filesystem: xfs	#使用overlay2存储系统格式必须为xfs
  Supports d_type: true		#使用overlay2必须开启d_type
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file	#日志存储类型; json-file会存储在本地,存储在Docker Root Dir指定的路径下
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  #以下支持日志存储的方式
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive		#Swarm未启动
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc	#RunC 是一个轻量级的工具,它是用来运行容器的
 Init Binary: docker-init
 containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc version: v1.0.2-0-g52b36a2
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 5.4.179-1.el7.elrepo.x86_64	#系统内核版本
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 7.749GiB
 Name: localhost.localdomain
 ID: 7FLQ:ERSG:BZNW:ERAA:UVWS:QDBW:ADGD:BZ7E:ADTV:WFWU:XKCX:TNPS
 Docker Root Dir: /data/docker		#docker数据存储路径,可更改,建议SSD存储单独挂载
 Debug Mode: false
 Registry: https://index.docker.io/v1/	#默认使用的镜像仓库
 Labels:
 Experimental: false
 Insecure Registries:	#针对于镜像仓库不是https方式访问的,可加入到下面中
  127.0.0.0/8
 Registry Mirrors:
  https://a7ye1cuu.mirror.aliyuncs.com/
 Live Restore Enabled: true	#重启docker进程不会重启正在运行的容器

查看系统是否支持d_type

[root@localhost ~]# xfs_info /
Docker基本知识学习教程-浅时光博客

搜索Docker镜像

[root@localhost ~]# docker search nginx
Docker基本知识学习教程-浅时光博客
  • 说明:
    • DESCRIPTION:描述信息
    • OFFICIAL:OK则表示为官方制作的镜像

拉取Docker镜像

[root@localhost ~]# docker pull nginx
Docker基本知识学习教程-浅时光博客
  • 说明:
    • 后面不添加tag则默认拉取最新的镜像(latest)
    • 如果本地已经存在相同的镜像则不会重新拉取(镜像地址、名称以及tag一致)
    • 如果pull后面没有指定镜像地址url则默认拉取docker hub上的镜像

Image TAG操作

更改镜像TAG

  • 语法:docker tag 源镜像存储库:TAG  目标镜像存储库:TAG
[root@localhost ~]# docker tag nginx:latest docker.devops.com/nginx:1.20.1

运行Docker容器

  • 语法:docker run 镜像存储库/镜像名称:tag号
前台启动:
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    605c77e624dd   6 weeks ago   141MB
[root@localhost ~]# docker run -it nginx:latest /bin/bash
root@f87d99293f63:/#

后台启动:-d参数
[root@localhost ~]# docker container run -it -d nginx:latest /bin/bash
eee23811d4ec6b5a5e8903ae98eb8487c84157da6cbeb6ad14551b45a7dd3b64

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
eee23811d4ec   nginx:latest   "/docker-entrypoint.…"   2 seconds ago   Up 2 seconds   80/tcp    dazzling_wiles

[root@localhost ~]# docker container exec -it eee23811d4ec /bin/bash
root@eee23811d4ec:/# exit
exit
[root@localhost ~]# docker container ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
eee23811d4ec   nginx:latest   "/docker-entrypoint.…"   30 seconds ago   Up 30 seconds   80/tcp    dazzling_wiles

指定容器名称喝容器暴露端口
[root@localhost ~]# docker container run -it -d -p 8080:80 --name nginx-web nginx /bin/bash

浏览器访问宿主机IP+8080端口

查看容器日志信息

docker logs -f <CONTAINER ID或NAMES>

查看宿主机的容器

  • docker ps       #查看正在运行的容器
  • docker ps -a    #查看宿主机上所有的容器
  • docker ps -q    #查看正在运行的容器的ID
  • docker p文章来源(Source):浅时光博客s -qa   #查看宿主机上所有的容器ID

进入到指定容器里

docker exec -it <CONTAINER ID或NAMES>

容器文件拷贝操作

语法:
#本机文件拷贝至容器中
docker cp 本机文件 CONTAINER ID:目标路径

#容器中文件拷贝至本机
docker cp CONTAINER ID:文件名称 本机路径 

Dockerfile基本指令


FROM

继承基础镜像,FROM在Dockerfile中是必须使用的指令,而且必须是第一条指令

说明:在Dockerfile文件中ARG是唯一一个可以用于FROM之前的指令;ARG指令用于定义参数名称以及对应的默认值;该默认值可以在构建命令 docker build 中用 –build-arg <参数名>=<值> 来覆盖

注意:一个Dockerfile文件可以有多个FROM指令,来创建多个镜像或者使用其中一个阶段作为另一个阶段的依赖项。

  • 格式
FROM <image> [AS <name>]
FROM <image>[:<tag>] [AS <name>]
FROM <image>[@<digest>] [AS <name>]
  • 例子
ARG  CODE_VERSION=latest
FROM nginx:${CODE_VERSION}
…
FROM mysql:${CODE_VERSION}
…

MAINTAINER(弃用)

镜像制作者信息;比文章来源(Source):https://www.dqzboy.com如制作者的名称,邮箱等信息,都可以在MAINTAINER指令中标示出来。

LABEL

给构建的镜像打标签;可以使用LABEL指令替代MAINTAINER

  • 格式
LABEL <key>=<value> <key>=<value> <key>=<value> ...

RUN

用来执行SHELL命令

  • 格式
RUN <command> (shell格式)
RUN ["executable", "parameter1", "parameter2"] (exec格式)

注意:executable为可执行的命令;parameter1和2为执行命令后面跟的参数;采用exec格式指令将会被解析成js文章来源(Source):浅时光博客on格式所以不能使用单引号

EXPOSE

指定容器监听的端口号;给我们制作的容器在运行时监听指定的端口号,并且可以指定端口协议是udp还是tcp,默认为tcp协议。

注意:EXPOSE指令不会对外暴露端口号,所以外部是无法通过EXPO原文链接:https://www.dqzboy.comSE监听的端口号进行访问到容器的;如果需要对外暴露端口需要在运行docker run指令时通过-p参数将容器监听端口映射至宿主机端口

  • 格式
EXPOSE <port> [<port>/<protocol>...]

CMD

启动容器默认执行的命令;对应K8s deployment里面的ARGS

  • 格式
CMD ["executable", "parameter1", "parameter2"](exec格式,首选)
CMD ["parameter1","parameter2"](给ENTRYPOINT提供默认参数)
CMD command parameter1 parameter2(shell格式)

ENTRYPOINT

启动容器真正执行的命令;对应K8s deployment里面的COMMAND

注意:CMD跟ENTRYPOINT在dockerfile文件中必须有一个;如果CMD跟ENTRYPOINT都有,那么ENTRYPOINT为程序启动命令,而CMD则会当做ENTRYPOINT的启动参数

  • 格式
ENTRYPOINT ["executable", "parameter1", "parameter2"] (执行格式,首选)
ENTRYPOINT command parameter1 parameter2 (shell格式)

VOLUME

创建挂载点;docker不建议保留容器文件的。但是有些我们需要进行数据持久化,就需要使用VOLUME指令进行数据的保存

  • 格式
VOLUME ["/data"]

ENV

配置环境变量

  • 格式
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

COPY

将主机的文件复制到镜像内,如果目的位置不存在,Docker会自动创建所有需要的目录结构,但是它只是单纯的复制,并不会去做文件提取和解压工作

  • 格式
COPY [--chown=<user>:<group>] <源路径>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径>",... "<目标路径>"]

ADD

将主机的文件复制到镜像内;

注意:如果你复制的是一个压缩包,压缩格式为tar tar.gz gzip bzip2 以及xz的情况下,那么拷贝至容器中后会自动帮我们解压

  • 格式
ADD <源路径>... <目标路径>
ADD ["<源路径>",... "<目标路径>"](路径包含空格的必须使用这种格式)

WORKDIR

为接下来的Dockerfile指令指定当前工作目录,可多次使用,如果使用的是相对路径,则相对的是上一个工作目录,类似shell中的cd命令

  • 格式
WORKDIR /path/to/workdir

USER

为接下来的Dockerfile指令指定用户

  • 格式
USER <user>[:<group>] or
USER <UID>[:<GID>]

Docker镜像制作实操


1、创建构建目录

[root@containers ~]# mkdir dockerbuild
[root@containers ~]# cd dockerbuild/
[root@containers dockerbuild]# ls
nginx-1.20.2.tar.gz	#此文件用来测试ADD指令解压

2、编写Dockerfile

[root@containers dockerbuild]# vim Dockerfile
ARG CODE_VERSION=latest
FROM nginx:${CODE_VERSION}
LABEL user="dqzboy"
RUN mkdir -p /opt/data
EXPOSE 80
CMD ls /opt
ADD ./nginx-1.20.2.tar.gz /opt/data/
USER nginx

说明:在Dockerfile中不建议同一个指令写多行,这样对镜像构建的层数会增加,大小也会增加

3、执行Dockerbuild

[root@containers dockerbuild]# docker build -t nginx:test .
Sending build context to Docker daemon  1.065MB
Step 1/8 : ARG CODE_VERSION=latest
Step 2/8 : FROM nginx:${CODE_VERSION}
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete 
a9edb18cadd1: Pull complete 
589b7251471a: Pull complete 
186b1aaa4aa6: Pull complete 
b4df32aa5a72: Pull complete 
a0bcbecc962e: Pull complete 
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
 ---> 605c77e624dd
Step 3/8 : LABEL user="dqzboy"
 ---> Running in ce207d3cd193
Removing intermediate container ce207d3cd193
 ---> 460d8c9fe6b4
Step 4/8 : RUN mkdir -p /opt/data
 ---> Running in abb022bf6313
Removing intermediate container abb022bf6313
 ---> 4351cc5281de
Step 5/8 : EXPOSE 80
 ---> Running in f3ab52ae69f4
Removing intermediate container f3ab52ae69f4
 ---> 467c37a81979
Step 6/8 : CMD ls /opt
 ---> Running in 52268dae069b
Removing intermediate container 52268dae069b
 ---> 6df238b44d40
Step 7/8 : ADD ./nginx-1.20.2.tar.gz /opt/data/
 ---> d22f60131ab7
Step 8/8 : USER nginx
 ---> Running in b5cb554091ac
Removing intermediate container b5cb554091ac
 ---> 8cfb7c300a8c
Successfully built 8cfb7c300a8c
Successfully tagged nginx:test

4、运行Docker容器

[root@containers dockerbuild]# docker container run -it --rm nginx:test /bin/bash
nginx@391aa2f4aa2b:/$ ls /opt/data/
nginx-1.20.2
nginx@391aa2f4aa2b:/$ ls /opt/data/nginx-1.20.2/
CHANGES  CHANGES.ru  LICENSE  README  auto  conf  configure  contrib  html  man  src
  • 参数说明:--rm,容器运行结束后删除容器文件(测试时建议添加该参数)

您也可以参考下方我之前写的Docker的文章结合本篇内容进行学习。

Docker介绍与实操

原文链接:https://www.dqzboy.com 2020-2-15 1



关注本站官方微信公众号『精彩程序人生』

扫描左侧二维码关注我们的微信公众帐号,在微信公众帐号中回复【资料】即可获取各类互联网技术学习资料。
关注博主不迷路~


本文作者:浅时光
原文链接:https://www.dqzboy.com/9920.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可
转载时请以超链接形式标明文章原始出处和作者信息
免责声明:本站发布的内容(图片、视频和文字)以及一切破解补丁、注册激活和软件解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。访问和下载本站内容,说明您已同意上述条款!


0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

    本站已稳定运行: | 耗时 0.440 秒 | 查询 14 次 | 内存 42.62 MB