Docker基础命令使用
查看Docker版本原文链接:https://www.dqzboy.com
[[email protected] ~]# 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信息
[[email protected] ~]# 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
[[email protected] ~]# xfs_info /

搜索Docker文章来源(Source):浅时光博客 镜像
[[email protected] ~]# docker search nginx

- 说明:
DESCRIPTION
:描述信息OFFICIAL
:OK则表示为官方制作的镜像
拉取Docker镜像
[[email protected] ~]# docker pull nginx

- 说明:
- 后面不添加tag则默认拉取最新的镜像(
latest
) - 如果本地已经存在相同的镜像则不会重新拉取(镜像地址、名称以及
tag
一致) - 如果pull后面没有指定镜像地址url则默认拉取docker hub上的镜像
- 后面不添加tag则默认拉取最新的镜像(
Image TAG操作
更改镜像TAG
- 语法:
docker tag 源镜像存储库:TAG 目标镜像存储库:TAG
[[email protected] ~]# docker tag nginx:latest docker.devops.com/nginx:1.20.1
运行Docker容器
- 语法:
docker run 镜像存储库/镜像名称:tag号
前台启动:
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 6 weeks ago 141MB
[[email protected] ~]# docker run -it nginx:latest /bin/bash
[email protected]:/#
后台启动:-d参数
[[email protected] ~]# docker container run -it -d nginx:latest /bin/bash
eee23811d4ec6b5a5e8903ae98eb8487c84157da6cbeb6ad14551b45a7dd3b64
[[email protected] ~]# 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
[[email protected] ~]# docker container exec -it eee23811d4ec /bin/bash
[email protected]:/# exit
exit
[[email protected] ~]# 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
指定容器名称喝容器暴露端口
[[email protected] ~]# 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
#查看正在运行的容器的IDdocker ps -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(弃用)
镜像制作者信息;比如制作者的名称,邮箱等信息,都可以在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格式指令将会被解析成json格式所以不能使用单引号
EXPOSE
指定容器监听的端口号;给我们制作的容器在运行时监听指定的端口号,并且可以指定端口协议是udp还是tcp,默认为tcp协议。
注意:EXPOSE指令不会对外暴露端口号,所以外部是无法通过EXPOSE监听的端口号进行访问到容器的;如果需要对外暴露端口需要在运行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、创建构建目录
[[email protected] ~]# mkdir dockerbuild
[[email protected] ~]# cd dockerbuild/
[[email protected] dockerbuild]# ls
nginx-1.20.2.tar.gz #此文件用来测试ADD指令解压
2、编写Dockerfile
[[email protected] 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
[[email protected] 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容器
[[email protected] dockerbuild]# docker container run -it --rm nginx:test /bin/bash
[email protected]:/$ ls /opt/data/
nginx-1.20.2
[email protected]:/$ ls /opt/data/nginx-1.20.2/
CHANGES CHANGES.ru LICENSE README auto conf configure contrib html man src
- 参数说明:
--rm
,容器运行结束后删除容器文件(测试时建议添加该参数)
您也可以参考下方我之前写的Docker的文章结合本篇内容进行学习。
学习学习,谢谢作者
正在学习这个,谢谢作者