暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

docker 镜像和容器

原创 破晓风暴 2025-01-21
60

[TOC]
## 一、获取Docker镜像
### 1. 语法
```
docker pull NAME:TAG
```
### 2. 说明
```
1、NAME是镜像名称;
2、TAG是镜像标签(表示版本信息);
3、通常情况下,描述一个镜像需要包括“名称+标签”信息。
4、严格来讲,镜像仓库名称前要加仓库的地址(即registry, 注册服务器)
作为前缀,只是默认使用的是官方Docker Hub服务,该前缀可以忽略。
5、即docker pull ubuntu:18.04相当于
docker pull registry.hub.docker.com/ubuntu:18.04
```
### 3. 范例
```
1、获取一个版本为9.0.1的tomcat镜像。
[root@node ~]# docker pull tomcat:9.0.1

2、若不指定TAG,则默认选择latest标签,这会下载仓库中最新版本的镜像。
[root@node ~]# docker pull tomcat
Using default tag: latest
```
### 4. docker pull时出现如下报错
```
[root@node ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
bb7d5a84853b: Pulling fs layer
f02b617c6a8c: Pulling fs layer
d32e17419b7e: Pulling fs layer
c9d2d81226a4: Waiting
fab4960f9cd2: Waiting
da1c1e7baf6d: Waiting
1d2ade66c57e: Waiting
ea2ad3f7cb7c: Waiting
d75cb8d0a5ae: Waiting
76c37a4fffe6: Waiting
error pulling image configuration: Get "https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/b0/b0e0b0a92cf96022059ea14d7c0bee5f51cc856f21be4566d435125d6b261a6b/data?verify=1636510877-1I2GArnKwIXUBYRe5hN9lfQIf2A%3D": dial tcp 104.18.123.25:443: i/o timeout


处理方法:将默认的镜像仓库修改为国内的镜像仓库,即配置加速。
1、在/etc/docker目录创建daemon.json文件
[root@node ~]# vim /etc/docker/daemon.json
2、以下提供的镜像仓库地址复制一个进去,重启docker即可。

# 个人仓库地址(当前可用)-20240816
{
"registry-mirrors":["https://docker.chenby.cn"]
}


{
"registry-mirrors":["https://docker.chenby.cn","https://dockerhub.icu","https://docker.1panel.live","https://docker.awsl9527.cn"]
}


# 阿里云镜像仓库
{
"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]
}


# 中科院镜像仓库
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}

# 重启docker服务
systemctl daemon-reload && systemctl restart docker
```
## 二、查看镜像信息
### 1. 使用docker images命令列出镜像
```
1. 语法:
docker images 选项
2. 选项:
-a 显示所有镜像;
-q 只显示镜像ID;
3. 范例:
[root@node ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 6084105296a9 9 days ago 133MB
```
### 2. 使用docker tag命令添加镜像标签
```
1. 功能描述:
为了方便在后续工作中使用特定镜像,可以使用docker tag命令来为本地镜像任意添加新的标签。
2. 语法:
语法1:docker tag 原NAME:原TAG 新NAME:新TAG
语法2:docker tag 镜像ID 新NAME:新TAG
3. 范例:
将centos:latest 标记为mycentos:8.3.2011

[root@node ~]# docker tag centos:latest mycentos:8.3.2011
[root@node ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 3 months ago 209MB
mycentos 8.3.2011 300e315adb2f 3 months ago 209MB

可以看出:
1、两个镜像的镜像ID完全相同,实际上它们指向的是同一个镜像文件,只是别名不同而已,docker tag命令添加的标签实际上起到了类似链接的作用;
2、若使用镜像ID删除,则两个镜像都会被删掉,所以删除其中一个镜像时使用标签删除。
```
## 三、删除和清理镜像
### 1. 删除无容器依赖的镜像
#### 1.1 使用标签删除镜像
```
1. 语法:
docker rmi NAME:TAG
2. 范例:
[root@node ~]# docker rmi nginx:latest

```
#### 1.2 使用镜像ID删除镜像
```
1. 语法:
docker rmi 镜像ID
2. 范例:
#删除指定镜像
[root@node ~]# docker rmi 6084105296a9

#删除所有镜像
[root@node ~]# docker rmi $(docker images -aq)

#删除所有容器
[root@node ~]# docker rm $(docker ps -aq)
[root@node ~]# docker rm -f $(docker ps -aq)
```

### 2. 删除有容器依赖的镜像
```
当存在由该镜像创建的容器时,镜像文件默认是无法直接被删除的。正确的做法是:先删除依赖该镜像的所有容器(在运行的容器需要先停掉),再删除镜像。

删除步骤:
1. 先停掉运行的容器
2. 再删掉停止的容器
3. 最后删除镜像
```
### 3. 清理镜像
```
使用Docker一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通以下命令进行清理。

1. 语法:
docker image prune 选项
2. 选项:
-a 清除所有没有容器引用的镜像;

prune /pruːn/ v.删除
```
## 四、创建镜像
```
创建镜像的方法主要有三种:基于已有镜像的容器创建(commit)、基于本地模板导入(import)、基于Dockerfile(build)创建。
```
### 1. 基于已有镜像的容器创建镜像(commit)
```
1. 语法:
docker commit 选项 容器ID 新NAME:TAG

2. 选项:
-a 提交镜像的作者;
-m 提交时的说明文字,例如做了什么操作;

3. 范例:
[root@node ~]# docker commit -a="cuixiubin" -m="cp webapps.dist to webapps" f1c5ccf79554 tomcat:v2021.03.24

说明:若无特别说明,其中的选项可以省略。
[root@node ~]# docker commit f1c5ccf79554 tomcat:1.0.0
```
## 五、导出和导入镜像
### 1. 导出镜像
```
1. 语法:
docker save -o 指定文件名 要导出的镜像名:版本号

docker save 将指定镜像保存成tar文件。

2. 选项:
-o 即--output,输出到的文件。

3. 说明:
如果使用镜像ID则导入后不显示镜像名称和版本信息,故推荐使用镜像名称:版本号的方式。

4. 范例:
4.1 导出centos:latest镜像到本地并命名为centos.tar。
[root@node ~]# docker save -o centos.tar centos:latest
```
### 2. 导入镜像
```
1. 语法:
docker load -i 镜像文件

2. 选项:
-i 即--input,指定导入的文件,代替STDIN。

3. 范例:
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver v1.17.4 2e1ba57fe95a 4 years ago 171MB
[root@master ~]#
[root@master ~]# docker save -o kube-apiserver-v1.17.4.tar registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.17.4
[root@master ~]#
```
## 六、上传镜像到DockerHub仓库
```
1. 语法:
docker push 账户名/NAME:TAG

2. 范例:
#登录DockerHub账号
[root@node ~]# docker login -u cxb -p cui123

#更改镜像名字
[root@node ~]# docker tag centos:7.9.2009 cxb/centos:7.9.2009

#使用docker push上传
[root@node ~]# docker push cxb/centos:7.9.2009
```


[TOC]
## 一、新建容器
```
1. 语法:
docker create -it NAME:TAG

2. 选项:
-i 保持标准输入打开,默认false;
-t 是否分配一个伪终端,默认false;

3. 范例:
#新建一个centos容器
[root@node ~]# docker create -it centos:7.9.2009 /bin/bash
```
## 二、运行容器
```
1. 功能描述:
启动一个已经创建的容器。

2. 语法:
docker start 容器ID/容器名
```
## 三、创建并运行容器(常用)
```
1. 语法:
docker run 选项 IMAGE:TAG

2. 选项:
-it 以交互方式运行启动的容器;
-d 后台运行;(运行Nginx、Tomcat等服务时加);
-p 端口映射,格式为,主机端口:容器端口,即本地端口映射到容器端口;
-P 当使-P时,Docker会随机映射一个49000-49900的端口到内部容器开放的网络端 口;
-v 卷挂载,即volume,将本地目录挂载到容器目录,格式为,主机目录:容器目录 ;
-e 环境配置;
例如:-e TZ="Asia/Shanghai" 指定容器的时区
--name 为容器指定一个名字;
--dns 8.8.8.8 指定容器使用的DNS,默认和宿主机一致;
--expose=端口号 开放一个或一组端口;
--privileged 允许容器内的程序具有特权访问主机系统的所有设备和文件。

3. 范例:
[root@node ~]# docker run -d -p 7788:80 --name Nginx nginx:1.9.6
[root@node ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c94062ea3e68 nginx:latest "/docker-entrypoin..." 20 seconds ago Up 18 seconds 0.0.0.0:7788->80/tcp Nginx

解读:即容器的80端口映射到本机的7788端口。
```
## 四、进入一个正在运行的容器
```
1. 语法:
docker exec -it 容器ID/容器名 /bin/bash
2. 范例:
[root@node ~]# docker exec -it e5c235b73a9e /bin/bash
```
## 五、启动、停止、删除容器
```
1. docker start 容器ID #启动容器
2. docker restart 容器ID #重启容器
3. docker stop 容器ID #停止正在运行的容器
4. docker kill 容器ID #强制停止运行的容器
5. docker rm 容器ID/容器名 #删除容器
6. docker rm $(docker ps -aq) #删除所有容器,但并不删除镜像。
7. docker rm -f 容器ID #强制删除容器,包括正在运行的容器。
8. docker rmi $(docker images -aq) #删除所有镜像
```


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论