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

news/2024/6/3 19:15:38 标签: docker, 容器, 运维

一、docker平台组成

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

二、常用基础命令

1、镜像操作

(1)拉取镜像

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

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

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

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

(2)查看镜像

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

[root@client ~]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
my_nginx        latest    28faf67102d4   3 days ago      141MB
client/my_vim   latest    5bc38c82d272   4 days ago      233MB
nginx           latest    605c77e624dd   19 months ago   141MB
ubuntu          latest    ba6acccedd29   22 months ago   72.8MB
centos          latest    5d0da3dc9764   23 months ago   231MB
[root@client ~]# docker image ls
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
my_nginx        latest    28faf67102d4   3 days ago      141MB
client/my_vim   latest    5bc38c82d272   4 days ago      233MB
nginx           latest    605c77e624dd   19 months ago   141MB
ubuntu          latest    ba6acccedd29   22 months ago   72.8MB
centos          latest    5d0da3dc9764   23 months ago   231MB

只列出镜像id:docker images -aq

[root@client ~]# docker images -aq
28faf67102d4
5bc38c82d272
605c77e624dd
ba6acccedd29
5d0da3dc9764

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

[root@client ~]# docker images  --format  "{{.ID}}--{{.Repository}}"
28faf67102d4--my_nginx
5bc38c82d272--client/my_vim
605c77e624dd--nginx
ba6acccedd29--ubuntu
5d0da3dc9764--centos
[root@client ~]# 
[root@client ~]# docker images  --format  "{{.ID}}****{{.Repository}}"
28faf67102d4****my_nginx
5bc38c82d272****client/my_vim
605c77e624dd****nginx
ba6acccedd29****ubuntu
5d0da3dc9764****centos

以表格形式显示

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

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

[root@client ~]# docker image inspect 5d0
[
    {
        "Id": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "RepoTags": [
            "centos:latest"
        ],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "",
        "Created": "2021-09-15T18:20:05.184694267Z",
....................
................
        }
    }
]

(3)删除镜像

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

[root@client ~]# docker rmi nginx
Untagged: nginx:latest
Untagged: nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Deleted: sha256:605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85

(4)导入与导出

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

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

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

#先删除centos镜像
[root@client ~]# docker rmi centos
Untagged: centos:latest
Untagged: centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
[root@client ~]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
my_nginx        latest    28faf67102d4   3 days ago      141MB
client/my_vim   latest    5bc38c82d272   4 days ago      233MB
ubuntu          latest    ba6acccedd29   22 months ago   72.8MB

#导入镜像文件
[root@client ~]# docker image load -i /root/img_backup/centos.bak 
Loaded image: centos:latest
[root@client ~]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
my_nginx        latest    28faf67102d4   3 days ago      141MB
client/my_vim   latest    5bc38c82d272   4 days ago      233MB
ubuntu          latest    ba6acccedd29   22 months ago   72.8MB
centos          latest    5d0da3dc9764   23 months ago   231MB

2、容器操作

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

[root@client ~]# docker info
Client: Docker Engine - Community
 Version:    24.0.5
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
.......
.......
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://8xpk5wnt.mirror.aliyuncs.com/
 Live Restore Enabled: false

(1)容器的运行与删除

运行容器docker run命令

常用选项:

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

a.容器运行示例1:

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

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

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

查看容器docker ps

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

[root@client ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@client ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS                      PORTS     NAMES
2f9cbbe467c4   centos    "bash"    44 minutes ago   Exited (0) 42 minutes ago             trusting_stonebraker

b.容器运行示例2:

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

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

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

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

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

停止容器docker stop + 容器id

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

[root@client ~]# docker stop 5d3
5d3
[root@client ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

c.删除容器

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

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

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

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

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

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

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

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

[root@client ~]# docker container inspect 118
[
    {
        "Id": "11822e8c3b388ebea6abcdde10896db5c11aa35a5f3493a4e467bb5c55bd413c",
        "Created": "2023-08-17T09:50:58.019924688Z",
        "Path": "bash",
        "Args": [],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
 .................................
................................

                    "MacAddress": "",
                    "DriverOpts": null
                }
            }
        }
    }
]

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

#拉取nginx镜像
[root@client ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Already exists 
a9edb18cadd1: Already exists 
589b7251471a: Already exists 
186b1aaa4aa6: Already exists 
b4df32aa5a72: Already exists 
a0bcbecc962e: Already exists 
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

#运行镜像生成容器,-p指定端口映射
[root@client ~]# docker run -d -p 85:80 nginx
f82c0d54593c96daf2e9b0652dc8bf35d5bfc2003158d6abfaa143d8dd38bc87

#查看端口转发情况
[root@client ~]# docker port f82
80/tcp -> 0.0.0.0:85
80/tcp -> [::]:85


#也可以使用大写的P来使用随机端口映射
[root@client ~]# docker run -d -P nginx
11c630580399c409247b990cb94130129e1e3d485928130fbd6864c6e3720ed3

#使用命令就可以知道随机的端口号是49153
[root@client ~]# docker port 11c
80/tcp -> 0.0.0.0:49153
80/tcp -> [::]:49153
[root@client ~]# 

(3)容器的提交

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

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

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

#提交容器,并命名为client/my_vim
[root@client ~]# docker commit 651c0fe0e77d client/my_vim
sha256:5bc38c82d2726cf303b96bf4ad65166f7112ee0b350bf5d1f5d394b8b721b4ed

#新的镜像因为下载了vim之类的。所以肯定比基础的centos镜像大
[root@client ~]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
client/my_vim   latest    5bc38c82d272   12 seconds ago   233MB
nginx           latest    605c77e624dd   19 months ago    141MB
ubuntu          latest    ba6acccedd29   22 months ago    72.8MB
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脚本文件

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

(2)构建dockerfile

docker build .

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

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

#构建
[root@client docker_test]# docker build .
[+] Building 1.0s (5/6)                                                                                    docker:default
 => [internal] load build definition from Dockerfile                                                                 0.0s
 => => transferring dockerfile: 120B                                                                                 0.0s
 => [internal] load .dockerignore                                                                                    0.0s
 => => transferring context: 2B                                                                                      0.0s
 => [internal] load metadata for docker.io/library/nginx:latest                                                      0.0s
 => CACHED [1/2] FROM docker.io/library/nginx                                                                        0.9s
 => [2/2] RUN echo "this is a dockerfile test" > /usr/share/nginx/html/index.html                                    0.9s
 => exporting to image                                                                                               0.0s
 => => exporting layers                                                                                              0.0s
 => => writing image sha256:9a0b6b17263f50ee29b2587ceea32dc79c23f53dc8b4b4935b563f0bfd7b8836                         0.0s

#查看新构建的镜像,默认是没有名字的,REPOSITORY和TAG都是<none> 
[root@client docker_test]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
<none>                <none>    9a0b6b17263f   31 seconds ago   141MB
my_nginx              latest    28faf67102d4   4 days ago       141MB
client/my_vim         latest    5bc38c82d272   4 days ago       233MB
nginx                 latest    605c77e624dd   19 months ago    141MB
redhat/ubi8-minimal   latest    0e1c0c70dbc5   20 months ago    103MB
ubuntu                latest    ba6acccedd29   22 months ago    72.8MB
centos                latest    5d0da3dc9764   23 months ago    231MB

#更改新镜像的名字:docker tag 镜像id 所取镜像名 
[root@client docker_test]# docker tag 9a0 nginx_test

#然后就可以查看到一个叫nginx_test的镜像啦
[root@client docker_test]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED              SIZE
nginx_test            latest    9a0b6b17263f   About a minute ago   141MB
my_nginx              latest    28faf67102d4   4 days ago           141MB
client/my_vim         latest    5bc38c82d272   4 days ago           233MB
nginx                 latest    605c77e624dd   19 months ago        141MB
redhat/ubi8-minimal   latest    0e1c0c70dbc5   20 months ago        103MB
ubuntu                latest    ba6acccedd29   22 months ago        72.8MB
centos                latest    5d0da3dc9764   23 months ago        231MB
[root@client docker_test]# 

(3)运行新镜像

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

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

(4)检测

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

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


http://www.niftyadmin.cn/n/4946247.html

相关文章

团团代码生成器V1.0:一键生成完整的CRUD功能(提供Gitee源码)

前言&#xff1a;在日常开发的中&#xff0c;经常会需要重复写一些基础的增删改查接口&#xff0c;虽说不难&#xff0c;但是会耗费我们一些时间&#xff0c;所以我自己开发了一套纯SpringBoot实现的代码生成器&#xff0c;可以为我们生成单条数据的增删改查&#xff0c;还可以…

使用Spring Boot和Redis实现用户IP接口限流的详细指南

系列文章目录 文章目录 系列文章目录前言一、准备工作二、编写限流过滤器三、配置Redis四、测试接口限流总结 前言 在高并发场景下&#xff0c;为了保护系统免受恶意请求的影响&#xff0c;接口限流是一项重要的安全措施。本文将介绍如何使用Spring Boot和Redis来实现用户IP的…

cesium学习记录09-turf.js的使用(画矩形结合地形生成三角网)

上一篇是绘制多边形&#xff0c;这一篇来说绘制矩形&#xff0c;但又因为只说绘制矩形太短了&#xff0c;所以就结合一下turf.js&#xff0c;生成一下地形三角网 Turf.js中文网 最终效果&#xff1a; 一、引入Turf.js 1&#xff0c;下载 npm install turf/turf2&#xff0c;…

Stable Diffusion XL(SDXL)原理详解

技术报告&#xff1a;SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis 官方代码&#xff1a;Stability-AI-generative-models 模型权重&#xff1a;HuggingFace-Stability AI 非官方代码&#xff1a;Linaqruf/kohya-trainer diffuser库&#xf…

Linux系统之wget命令的基本使用

Linux系统之wget命令的基本使用 一、wget命令介绍二、本次实践环境三、wget命令的使用帮助3.1 wget命令的基本语法3.2 wget选项解释 四、安装wget工具4.1 检查yum仓库状态4.2 安装wget工具 五、wget命令的基本使用5.1 直接下载文件5.2 下载时指定文件名5.3 后台下载文件5.4 限速…

php+echarts实现数据可视化实例

效果&#xff1a; 代码&#xff1a; php <?php include(includes/session.inc); include(includes/SQL_CommonFunctions.inc); ?> <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv&quo…

C# 读取pcd点云文件数据

pcd文件有ascii 和二进制格式&#xff0c;ascii可以直接记事本打开&#xff0c;C#可以一行行读。但二进制格式的打开是乱码&#xff0c;如果尝试程序中读取&#xff0c;对比下看了数据也对不上。 这里可以使用pcl里的函数来读取pcd&#xff0c;无论二进制或ascii都可以正确读取…

Maven自定义脚手架(多module模块)+自定义参数

脚手架 视频教程&#xff1a; Maven保姆级教程 脚手架是一个项目模板&#xff0c;包含常用的工程结构、代码。 1 自定义脚手架 脚手架创建的步骤如下&#xff0c;先创建一个工程&#xff0c;把常用的代码写好&#xff0c;进入工程根目录&#xff0c;进行如下操作&#xff1a; …