当前位置:   article > 正文

教你10分钟快速上手Docker基础操作_docker 操作

docker 操作

目录

一、docker平台组成

二、常用基础命令

1、镜像操作

(1)拉取镜像

(2)查看镜像

(3)删除镜像

(4)导入与导出

2、容器操作

(1)容器的运行与删除

a.容器运行示例1:

b.容器运行示例2:

c.删除容器

(2)容器其他相关信息查看

(3)容器的提交

三、dockerfile的制作

1、dockerfile的主要组成部分

2、dockerfile指令

3、dockerfile制作过程

(1)编写dockerfile脚本文件

(2)构建dockerfile

(3)运行新镜像

(4)检测


一、docker平台组成

docker最核心的组件是:镜像、容器、仓库

二、常用基础命令

1、镜像操作

(1)拉取镜像

查找指定镜像:docker search + 镜像名字

  1. [root@client ~]# docker search centos
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. centos DEPRECATED; The official build of CentOS. 7627 [OK]
  4. kasmweb/centos-7-desktop CentOS 7 desktop for Kasm Workspaces 40
  5. bitnami/centos-base-buildpack Centos base compilation image 0 [OK]
  6. couchbase/centos7-systemd centos7-systemd images with additional debug… 8 [OK]
  7. continuumio/centos5_gcc5_base 3
  8. datadog/centos-i386 0
  9. dokken/centos-7 CentOS 7 image for kitchen-dokken 5
  10. dokken/centos-8 CentOS 8 image for kitchen-dokken 3
  11. spack/centos7 CentOS 7 with Spack preinstalled 1
  12. dokken/centos-6 EOL: CentOS 6 image for kitchen-dokken 0
  13. atlas/centos7-atlasos ATLAS CentOS 7 Software Development OS 0
  14. couchbase/centos-72-java-sdk 0
  15. spack/centos6 CentOS 6 with Spack preinstalled 1
  16. couchbase/centos-72-jenkins-core 0
  17. ustclug/centos Official CentOS Image with USTC Mirror 0
  18. couchbase/centos-70-sdk-build 0
  19. couchbase/centos-69-sdk-build 0
  20. couchbase/centos-69-sdk-nodevtoolset-build 0
  21. eclipse/centos_jdk8 CentOS, JDK8, Maven 3, git, curl, nmap, mc, … 5 [OK]
  22. dokken/centos-stream-8 4
  23. adoptopenjdk/centos7_build_image 1
  24. corpusops/centos-bare https://github.com/corpusops/docker-images/ 0
  25. dokken/centos-stream-9 6
  26. corpusops/centos centos corpusops baseimage 0
  27. adoptopenjdk/centos6_build_image 0

拉取镜像:docker pull + 名字:tag (不加tag则默认为latest,也可以自己指定tag版本)

  1. [root@client ~]# docker pull centos
  2. Using default tag: latest
  3. latest: Pulling from library/centos
  4. Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
  5. Status: Downloaded newer image for centos:latest
  6. docker.io/library/centos:latest

(2)查看镜像

查看本地镜像文件:docker images 或者 docker image ls 

  1. [root@client ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. my_nginx latest 28faf67102d4 3 days ago 141MB
  4. client/my_vim latest 5bc38c82d272 4 days ago 233MB
  5. nginx latest 605c77e624dd 19 months ago 141MB
  6. ubuntu latest ba6acccedd29 22 months ago 72.8MB
  7. centos latest 5d0da3dc9764 23 months ago 231MB
  8. [root@client ~]# docker image ls
  9. REPOSITORY TAG IMAGE ID CREATED SIZE
  10. my_nginx latest 28faf67102d4 3 days ago 141MB
  11. client/my_vim latest 5bc38c82d272 4 days ago 233MB
  12. nginx latest 605c77e624dd 19 months ago 141MB
  13. ubuntu latest ba6acccedd29 22 months ago 72.8MB
  14. centos latest 5d0da3dc9764 23 months ago 231MB

只列出镜像id:docker images -aq

  1. [root@client ~]# docker images -aq
  2. 28faf67102d4
  3. 5bc38c82d272
  4. 605c77e624dd
  5. ba6acccedd29
  6. 5d0da3dc9764

格式化显示,关键参数--format

  1. [root@client ~]# docker images --format "{{.ID}}--{{.Repository}}"
  2. 28faf67102d4--my_nginx
  3. 5bc38c82d272--client/my_vim
  4. 605c77e624dd--nginx
  5. ba6acccedd29--ubuntu
  6. 5d0da3dc9764--centos
  7. [root@client ~]#
  8. [root@client ~]# docker images --format "{{.ID}}****{{.Repository}}"
  9. 28faf67102d4****my_nginx
  10. 5bc38c82d272****client/my_vim
  11. 605c77e624dd****nginx
  12. ba6acccedd29****ubuntu
  13. 5d0da3dc9764****centos

以表格形式显示

  1. [root@client ~]# docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
  2. IMAGE ID REPOSITORY TAG
  3. 28faf67102d4 my_nginx latest
  4. 5bc38c82d272 client/my_vim latest
  5. 605c77e624dd nginx latest
  6. ba6acccedd29 ubuntu latest
  7. 5d0da3dc9764 centos latest

 查看镜像的详细信息:docker image inspect + 镜像id

  1. [root@client ~]# docker image inspect 5d0
  2. [
  3. {
  4. "Id": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
  5. "RepoTags": [
  6. "centos:latest"
  7. ],
  8. "RepoDigests": [],
  9. "Parent": "",
  10. "Comment": "",
  11. "Created": "2021-09-15T18:20:05.184694267Z",
  12. ....................
  13. ................
  14. }
  15. }
  16. ]

(3)删除镜像

删除镜像:docker rmi + 名字/id(指定id前三位即可)(被删除的镜像如果有依赖的容器记录,得先删除容器才能删除镜像)

  1. [root@client ~]# docker rmi nginx
  2. Untagged: nginx:latest
  3. Untagged: nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
  4. Deleted: sha256:605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85

(4)导入与导出

导出镜像:docker image save 镜像名 -o 目标目录下的文件

  1. [root@client ~]# mkdir img_backup
  2. [root@client ~]# docker image save centos -o /root/img_backup/centos.bak
  3. [root@client ~]# ll /root/img_backup/
  4. total 232992
  5. -rw------- 1 root root 238581248 Aug 17 08:25 centos.bak

导入镜像:docker image load -i 目标镜像文件

  1. #先删除centos镜像
  2. [root@client ~]# docker rmi centos
  3. Untagged: centos:latest
  4. Untagged: centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
  5. [root@client ~]# docker images
  6. REPOSITORY TAG IMAGE ID CREATED SIZE
  7. my_nginx latest 28faf67102d4 3 days ago 141MB
  8. client/my_vim latest 5bc38c82d272 4 days ago 233MB
  9. ubuntu latest ba6acccedd29 22 months ago 72.8MB
  10. #导入镜像文件
  11. [root@client ~]# docker image load -i /root/img_backup/centos.bak
  12. Loaded image: centos:latest
  13. [root@client ~]# docker images
  14. REPOSITORY TAG IMAGE ID CREATED SIZE
  15. my_nginx latest 28faf67102d4 3 days ago 141MB
  16. client/my_vim latest 5bc38c82d272 4 days ago 233MB
  17. ubuntu latest ba6acccedd29 22 months ago 72.8MB
  18. centos latest 5d0da3dc9764 23 months ago 231MB

2、容器操作

查看docker服务的详细信息:docker info

  1. [root@client ~]# docker info
  2. Client: Docker Engine - Community
  3. Version: 24.0.5
  4. Context: default
  5. Debug Mode: false
  6. Plugins:
  7. buildx: Docker Buildx (Docker Inc.)
  8. .......
  9. .......
  10. Insecure Registries:
  11. 127.0.0.0/8
  12. Registry Mirrors:
  13. https://8xpk5wnt.mirror.aliyuncs.com/
  14. Live Restore Enabled: false

(1)容器的运行与删除

运行容器:docker run命令

常用选项:

-t打开一个终端,像使用交换机一样使用容器
-i交互式访问
--name给容器命名
--network指定网络
-rm停止容器,则自动删除容器
-d后台运行容器,返回容器ID
-p(小写)端口映射,格式为:主机/宿主端口:容器端口
-P(大写)随机端口映射,不需要指定,容器内部的端口映射到主机随机的端口
a.容器运行示例1:

以交互式进入、打开终端并以bash进程运行一个容器

该容器是运行centos镜像生成的容器实例,可以发现也能用一些基础命令,如ls,使用命令exit即可退出

  1. [root@client ~]# docker run -it centos bash
  2. [root@2f9cbbe467c4 /]#
  3. [root@2f9cbbe467c4 /]# ls
  4. bin etc lib lost+found mnt proc run srv tmp var
  5. dev home lib64 media opt root sbin sys usr
  6. [root@2f9cbbe467c4 /]# exit
  7. exit

查看容器:docker ps

不加 -a 则查看的是正在运行的容器,目前没有正在运行的容器;加上 -a 则可以看到刚才运行过的所有容器

  1. [root@client ~]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. [root@client ~]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. 2f9cbbe467c4 centos "bash" 44 minutes ago Exited (0) 42 minutes ago trusting_stonebraker
b.容器运行示例2:

我们给新运行的容器命名为test1,然后退出容器没有用exit,但是容器却还在运行,这是因为我用的ctrl+p+q退出的,这样的退出方式不会停止容器的运行

  1. [root@client ~]# docker run -it --name test1 centos bash
  2. [root@5d38ff8d0ab4 /]#
  3. [root@5d38ff8d0ab4 /]#
  4. [root@5d38ff8d0ab
  5. [root@client ~]# docker ps
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. 5d38ff8d0ab4 centos "bash" 44 seconds ago Up 44 seconds test1

我们用exec命令即可进入正在运行的容器

  1. [root@client ~]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 5d38ff8d0ab4 centos "bash" 5 minutes ago Up 5 minutes test1
  4. [root@client ~]# docker exec -it 5d3 bash
  5. [root@5d38ff8d0ab4 /]#
  6. [root@5d38ff8d0ab4 /]# exit
  7. exit

其他docker run的常用选项大家可以自行再去尝试,例如-d后台运行等,我就不一一演示完了

停止容器:docker stop + 容器id

运行一个停止的容器:docker start + 容器id

  1. [root@client ~]# docker stop 5d3
  2. 5d3
  3. [root@client ~]# docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c.删除容器

接下来删除容器:docker rm + 容器id

  1. [root@client ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 5d38ff8d0ab4 centos "bash" 9 minutes ago Exited (0) 2 minutes ago test1
  4. 447edf2e6536 centos "--name test1 bash" 10 minutes ago Created angry_jones
  5. 2f9cbbe467c4 centos "bash" 58 minutes ago Exited (0) 56 minutes ago trusting_stonebraker
  6. [root@client ~]# docker rm 5d3
  7. 5d3
  8. [root@client ~]# docker ps -a
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. 447edf2e6536 centos "--name test1 bash" 10 minutes ago Created angry_jones
  11. 2f9cbbe467c4 centos "bash" 59 minutes ago Exited (0) 57 minutes ago trusting_stonebrake

删除全部的容器:docker rm $(docker ps -aq)

  1. [root@client ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 447edf2e6536 centos "--name test1 bash" 11 minutes ago Created angry_jones
  4. 2f9cbbe467c4 centos "bash" About an hour ago Exited (0) 58 minutes ago trusting_stonebraker
  5. [root@client ~]# docker rm $(docker ps -qa)
  6. 447edf2e6536
  7. 2f9cbbe467c4
  8. [root@client ~]# docker ps -a
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. [root@client ~]#

(2)容器其他相关信息查看

查看容器日志:docker logs + 容器id

  1. [root@client ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 11822e8c3b38 centos "bash" 6 minutes ago Exited (0) 2 minutes ago trusting_hawking
  4. [root@client ~]# docker logs 118
  5. [root@11822e8c3b38 /]# exit
  6. exit
  7. [root@11822e8c3b38 /]# exit
  8. [root@client ~]#

查看容器运行的详细信息: docker container inspect + 容器id

  1. [root@client ~]# docker container inspect 118
  2. [
  3. {
  4. "Id": "11822e8c3b388ebea6abcdde10896db5c11aa35a5f3493a4e467bb5c55bd413c",
  5. "Created": "2023-08-17T09:50:58.019924688Z",
  6. "Path": "bash",
  7. "Args": [],
  8. "State": {
  9. "Status": "exited",
  10. "Running": false,
  11. "Paused": false,
  12. .................................
  13. ................................
  14. "MacAddress": "",
  15. "DriverOpts": null
  16. }
  17. }
  18. }
  19. }
  20. ]

查看容器端口转发情况:docker port + 容器id

  1. #拉取nginx镜像
  2. [root@client ~]# docker pull nginx
  3. Using default tag: latest
  4. latest: Pulling from library/nginx
  5. a2abf6c4d29d: Already exists
  6. a9edb18cadd1: Already exists
  7. 589b7251471a: Already exists
  8. 186b1aaa4aa6: Already exists
  9. b4df32aa5a72: Already exists
  10. a0bcbecc962e: Already exists
  11. Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
  12. Status: Downloaded newer image for nginx:latest
  13. docker.io/library/nginx:latest
  14. #运行镜像生成容器,-p指定端口映射
  15. [root@client ~]# docker run -d -p 85:80 nginx
  16. f82c0d54593c96daf2e9b0652dc8bf35d5bfc2003158d6abfaa143d8dd38bc87
  17. #查看端口转发情况
  18. [root@client ~]# docker port f82
  19. 80/tcp -> 0.0.0.0:85
  20. 80/tcp -> [::]:85
  21. #也可以使用大写的P来使用随机端口映射
  22. [root@client ~]# docker run -d -P nginx
  23. 11c630580399c409247b990cb94130129e1e3d485928130fbd6864c6e3720ed3
  24. #使用命令就可以知道随机的端口号是49153
  25. [root@client ~]# docker port 11c
  26. 80/tcp -> 0.0.0.0:49153
  27. 80/tcp -> [::]:49153
  28. [root@client ~]#

(3)容器的提交

示例:运行基础的centos镜像,在容器内安装vim,然后提交新的镜像。通过运行新的镜像再运行出来的容器,默认就携带了vim了

  1. [root@client ~]# docker run -it centos bash
  2. [root@651c0fe0e77d /]# yum install vim -y

提交容器:docker commit 容器id 新的镜像名

  1. #提交容器,并命名为client/my_vim
  2. [root@client ~]# docker commit 651c0fe0e77d client/my_vim
  3. sha256:5bc38c82d2726cf303b96bf4ad65166f7112ee0b350bf5d1f5d394b8b721b4ed
  4. #新的镜像因为下载了vim之类的。所以肯定比基础的centos镜像大
  5. [root@client ~]# docker images
  6. REPOSITORY TAG IMAGE ID CREATED SIZE
  7. client/my_vim latest 5bc38c82d272 12 seconds ago 233MB
  8. nginx latest 605c77e624dd 19 months ago 141MB
  9. ubuntu latest ba6acccedd29 22 months ago 72.8MB
  10. centos latest 5d0da3dc9764 23 months ago 231MB

后面再去运行这个提交的新镜像,就会默认携带vim了

三、dockerfile的制作

1、dockerfile的主要组成部分

基础镜像信息(如:FROM centos:xxx)

制作镜像操作指令(如:RUN yum install xxx -y)

容器启动时执行指令(如:CMD ["/bin/bash"])

2、dockerfile指令

FROM指定基础镜像
MAINTAINER指定维护者信息
RUN后面跟想要执行的命令
ADD拷贝文件,会自动解压,官方推荐使用COPY
COPY复制文件,对文件不做任何修改,完全一样
WORKDIR设置当前工作目录
VOLUME设置卷,挂载主机目录
EXPOSE指定对外的端口
CMD指定容器启动之后要执行的
ENV环境变量
ENTRYPOINT容器启动后执行的命令(与CMD存在区别)

CMD ["/bin/bash"] =>等同于命令行的直接操作 docker run -it centos bash

CMD ["cat","/etc/os-release"] => 等同于命令行的直接操作 docker run -it centos cat /etc/os-release

tips:ENTRYPOINT和CMD的区别?

作用都是指定容器启动程序以及参数; 但是当指定了ENTRYPOINT之后,CMD指令的语义就有了变化,是把CMD的内容当作参数传递给了ENTRYPOINT指令

3、dockerfile制作过程

下面以一个简单的nginx案例来演示

(1)编写dockerfile脚本文件

  1. [root@client ~]# mkdir docker_test
  2. [root@client ~]# cd docker_test/
  3. [root@client docker_test]# vim Dockerfile
  4. #编辑以下内容到Dockerfile中
  5. FROM nginx
  6. RUN echo "this is a dockerfile test" > /usr/share/nginx/html/index.html
  7. #保存退出

(2)构建dockerfile

docker build .

如果不想用构建过的缓存可以这样:docker build --no-cache .

注意,两个命令后面都跟上的是点“.”

  1. #构建
  2. [root@client docker_test]# docker build .
  3. [+] Building 1.0s (5/6) docker:default
  4. => [internal] load build definition from Dockerfile 0.0s
  5. => => transferring dockerfile: 120B 0.0s
  6. => [internal] load .dockerignore 0.0s
  7. => => transferring context: 2B 0.0s
  8. => [internal] load metadata for docker.io/library/nginx:latest 0.0s
  9. => CACHED [1/2] FROM docker.io/library/nginx 0.9s
  10. => [2/2] RUN echo "this is a dockerfile test" > /usr/share/nginx/html/index.html 0.9s
  11. => exporting to image 0.0s
  12. => => exporting layers 0.0s
  13. => => writing image sha256:9a0b6b17263f50ee29b2587ceea32dc79c23f53dc8b4b4935b563f0bfd7b8836 0.0s
  14. #查看新构建的镜像,默认是没有名字的,REPOSITORY和TAG都是<none>
  15. [root@client docker_test]# docker images
  16. REPOSITORY TAG IMAGE ID CREATED SIZE
  17. <none> <none> 9a0b6b17263f 31 seconds ago 141MB
  18. my_nginx latest 28faf67102d4 4 days ago 141MB
  19. client/my_vim latest 5bc38c82d272 4 days ago 233MB
  20. nginx latest 605c77e624dd 19 months ago 141MB
  21. redhat/ubi8-minimal latest 0e1c0c70dbc5 20 months ago 103MB
  22. ubuntu latest ba6acccedd29 22 months ago 72.8MB
  23. centos latest 5d0da3dc9764 23 months ago 231MB
  24. #更改新镜像的名字:docker tag 镜像id 所取镜像名
  25. [root@client docker_test]# docker tag 9a0 nginx_test
  26. #然后就可以查看到一个叫nginx_test的镜像啦
  27. [root@client docker_test]# docker images
  28. REPOSITORY TAG IMAGE ID CREATED SIZE
  29. nginx_test latest 9a0b6b17263f About a minute ago 141MB
  30. my_nginx latest 28faf67102d4 4 days ago 141MB
  31. client/my_vim latest 5bc38c82d272 4 days ago 233MB
  32. nginx latest 605c77e624dd 19 months ago 141MB
  33. redhat/ubi8-minimal latest 0e1c0c70dbc5 20 months ago 103MB
  34. ubuntu latest ba6acccedd29 22 months ago 72.8MB
  35. centos latest 5d0da3dc9764 23 months ago 231MB
  36. [root@client docker_test]#

(3)运行新镜像

运行刚才生成的新镜像,生成一个容器实例

  1. #我们后台运行(-d),随便用一个88号端口来做端口映射(-p)
  2. [root@client docker_test]# docker run -d -p 88:80 nginx_test
  3. a23faeb0353b5e77d0ddcc097332a3e1d2f15c1498c0d8c77b2e050c7a2c7712
  4. [root@client docker_test]#

(4)检测

通过主机的ip加上刚才的88号端口,到浏览器查看

测试成功,最后,看到这里,相信你已经年薪80w+了,恭喜您!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/714487
推荐阅读
相关标签
  

闽ICP备14008679号