最全【云原生生态圈】:Docker核心技术全面总结_技下万eff66e(2),2024年最新开源新作

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://6c6b34mj.mirror.aliyuncs.com”]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker


## 三 Docker镜像操作


### 3.1 什么是Docker镜像



> 
> ​ Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker容器启动是需要的一些文件,而这些文件就可以称为Docker镜像。
> 
> 
> 


![1539937129245](https://img-blog.csdnimg.cn/img_convert/e0fade71154000d3804b055ac05c7bb3.png)


### 3.2 列出镜像



> 
> 列出docker下的当前docker服务所在的系统里面所有镜像:docker images
> 
> 
> ![1539937374829](https://img-blog.csdnimg.cn/img_convert/aefcb6e3145e9be916c93289490671fd.png)
> 
> 
> ➢ REPOSITORY:镜像所在的仓库名称  
>  ➢ TAG:镜像标签  
>  ➢ IMAGE ID:镜像ID  
>  ➢ CREATED:镜像的创建日期(不是获取该镜像的日期)  
>  ➢ SIZE:镜像大小  
>  ➢ 这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
> 
> 
> 为了区分同一个仓库下的不同镜像,Docker提供了一种称为标签(Tag)的功能。每个镜像在列出来时都带有一个标签,例如12.10、12.04等等。每个标签对组成特定镜像的一些镜像层进行标记。这种机制使得同一个仓库中可以存储多个镜像。
> 
> 
> 


### 3.3 拉取镜像


Docker Hub地址:<https://hub.docker.com/>


Docker镜像首页,包括官方镜像和其它公开镜像。页面如下


![image-20220602203502285](https://img-blog.csdnimg.cn/img_convert/6316e9ad6d73a8181b34d33eb8af246b.png)


搜索nginx,出现如下页面:


![image-20220602203541096](https://img-blog.csdnimg.cn/img_convert/63255f10be6ca946d1c0574b8e0e648a.png)


点进去之后可以复制如下位置的命令,进行拉取


![image-20220602203649267](https://img-blog.csdnimg.cn/img_convert/105696f172b947db22ec984fda7fc3e8.png)


**拉取镜像**



docker pull nginx #如果不加版本号,默认拉取的是最新版

也可以通过镜像名:版本名(标签)下载制定版本

docker pull nginx:1.20.1

docker pull redis #如果不加版本号,默认拉取的是最新版
docker pull redis:6.2.4

下载来的镜像都在本地

docker images #查看所有镜像

docker rmi 镜像名:版本号/镜像id #删除镜像


### 3.4 删除镜像


删除镜像方式1:根据仓库的名称(镜像的名称)来删除 还可以使用image\_id来进行删除。



1、 docker rmi $IMAGE_ID:删除指定镜像


删除镜像方式2:



2、 docker rmi docker images -q:删除所有镜像


![1539939107261](https://img-blog.csdnimg.cn/img_convert/727d59db57fe96a2804e5f8825090f44.png)


## 四 Docker容器操作


### 4.1 查看容器


* 查看正在运行容器:



docker ps


* 查看所有的容器(启动过的历史容器)



docker ps –a


![1539939232029](https://img-blog.csdnimg.cn/img_convert/f5379ee7d2da34a749baa0cd52309728.png)


* 查看最后一次运行的容器:



docker ps -l


![1539939270559](https://img-blog.csdnimg.cn/img_convert/84905865b0d5504a8d9d355107b3da67.png)


* 查看停止的容器



docker ps -f status=exited


### 4.2 创建与启动容器



> 
> 启动镜像的命令格式如下:
> 
> 
> `docker run [OPTIONS] IMAGE [COMMAND] [ARG...]`
> 
> 
> 创建容器常用的参数说明:
> 
> 
> ➢ 创建容器命令:docker run
> 
> 
> ➢ -it:表示容器启动后会进入其命令行,即分配一个伪终端,容器创建完就自动进入该容器,例如有一个centos:7镜像,我们想运行完镜像后就进入centos中,可以用如下方式
> 
> 
> 
> ```
> docker run -it --name=mycentos centos:7 /bin/bash
> 
> ```
> 
> 运行结果如下
> 
> 
> ![image-20220602204812308](https://img-blog.csdnimg.cn/img_convert/98dc217c677297ccf739727b58d40dbe.png)
> 
> 
> ➢ --name :为创建的容器命名。
> 
> 
> ➢ -v:表示目录映射关系(前者是本地目录,后者是容器中的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在本地上做修改,然后共享到容器上。
> 
> 
> ➢ -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
> 
> 
> ➢ -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
> 
> 
> ➢ --restart=always: 表示开机自启
> 
> 
> 


options 说明


![在这里插入图片描述](https://img-blog.csdnimg.cn/e750cde91b814a05a9868e7f6b0b7151.png)



-d:表示后台运行

–restart=always: 表示开机自启

启动nginx应用容器,并映射88端口,访问88会映射到docker中的80

docker run --name=mynginx -d --restart=always -p 88:80 nginx

查看正在运行的容器

docker ps

查看所有容器,包括运行与没运行的

docker ps -a

删除停止的容器

docker rm 容器id/名字
#强制删除正在运行中的容器
docker rm -f mynginx

#停止容器
docker stop 容器id/名字
#再次启动
docker start 容器id/名字

#更新应用使某个容器开机自启
docker update 容器id/名字 --restart=always


**测试docker配置的端口映射**


在云服务器开启端口88访问权限


![image-20220602150705025](https://img-blog.csdnimg.cn/img_convert/615a1771330cbba6ebc3ccd5e90d203c.png)


访问http://47.106.176.37:88/


![image-20220602150721034](https://img-blog.csdnimg.cn/img_convert/058fd6b023740d43c844898e1aa5bcda.png)


### 4.3 在后台运行容器


对于一个需要长期运行的容器来说,我们可以创建一个后台运行的容器


命令如下(容器名称不能重复):



-d:表示后台运行

–restart=always: 表示开机自启

启动nginx应用容器,并映射88端口,访问88会映射到docker中的80

docker run --name=mynginx -d --restart=always -p 88:80 nginx


### 4.4 进入容器中的bash指令


进入容器的指令如下:



进入容器内部的系统,修改容器内容 (exit退出时,容器不会停止)

docker exec -it 容器id /bin/bash


如果想修改nginx的index.html页面,可通过如下方式进行操作,首先使用`docker exec -it a4c5bda255e7 /bin/bash`进入容器内部:


![image-20220602151029907](https://img-blog.csdnimg.cn/img_convert/c4b4fefd6c1b1fc2c6cfc3373df26ebc.png)


某一个容器的相关详细配置信息可在https://hub.docker.com/\_/nginx中找到,页面如下:


![image-20220602151227996](https://img-blog.csdnimg.cn/img_convert/dcc1005a3dd5f0b560643499cf6d39b0.png)


进入`usr/share/nginx/html/`目录,然后修改index.html


![image-20220602155957827](https://img-blog.csdnimg.cn/img_convert/443572d02f7d53290f124624c0c5ed62.png)


### 4.4 镜像提交的bash指令



镜像提交语句的格式如下

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

将刚刚修改的nginx容器提交

docker commit -a “name” -m “首页变化” 31687689365b hashnodenginx:v1.0


案例演示如下:


![image-20220602154920600](https://img-blog.csdnimg.cn/img_convert/8cabb0219f27ffe54729720a4b2e3014.png)


重新启动镜像:


![image-20220602160254935](https://img-blog.csdnimg.cn/img_convert/0a4d88eb111b8db29f4456125313dba0.png)


访问http://47.106.176.37:88/


![image-20220602160312337](https://img-blog.csdnimg.cn/img_convert/5191b19c302aa1ad50cad3daeaeb542f.png)


### 4.5 镜像给他人用


**方式一:将自己修改好的镜像提交**



将镜像保存成压缩包

docker save -o abc.tar guignginx:v1.0

别的机器加载这个镜像

docker load -i abc.tar

离线安装


![image-20220602180658246](https://img-blog.csdnimg.cn/img_convert/1fe13fc84614aa280bc1fc0a36c2c04d.png)


![image-20220602180755327](https://img-blog.csdnimg.cn/img_convert/063d996c9afc50170cdf4ffc97024108.png)


**方式二:推送远程仓库,以[docker hub](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)为例**


首先登录dockerhub


![image-20220602181553746](https://img-blog.csdnimg.cn/img_convert/e77f56fe4c600c970e691815d1ea2846.png)


选择 Create Repository


![image-20220602181732661](https://img-blog.csdnimg.cn/img_convert/056ad7f57ae4d0ab1d0d8c34a4b4e259.png)


![image-20220602181938562](https://img-blog.csdnimg.cn/img_convert/94113983a0f5dacda365389f606054f0.png)



格式

docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname

步骤

1 把旧镜像的名字,改成仓库要求的新版名字

docker tag guignginx:v1.0 hashnoder/hashnodenginx:v1.0

2 登录到docker hub

docker login

3 推送

docker push hashnoder/hashnodenginx:v1.0

4 别的机器下载

docker pull hashnoder/hashnodenginx:v1.0

docker logout #推送完成镜像后退出


使用案例如下:


![image-20220602182720872](https://img-blog.csdnimg.cn/img_convert/8f66b8dc119ce9e59502b8e2f6812319.png)


push完之后就可以在docker hub中查到我们刚刚上传的镜像


![image-20220602183502367](https://img-blog.csdnimg.cn/img_convert/a5c42ffb4a7bc6e85b2ca1ade2da5094.png)


其他人就可以通过docker pull拉取镜像了。


### 4.6 停止与启动容器


* 停止正在运行的容器:docker stop $CONTAINER\_NAME/ID



docker stop mycentos2


![1539940106258](https://img-blog.csdnimg.cn/img_convert/ea1251ca36cc2e824cb1209075a9abb2.png)


* 启动已运行过的容器:docker start $CONTAINER\_NAME/ID



docker start mycentos2


![1539940139993](https://img-blog.csdnimg.cn/img_convert/2d15617ecdb11f5bcdea075a733e8bf8.png)


### 4.7目录挂载(映射)


我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器里所对应的目录。



创建容器 添加-v参数 后边为 本地目录:容器目录


创建容器 并挂载本地目录到容器中的目录下:



-v表示目录的挂载,本地/data/html目录指向镜像中的/usr/share/nginx/html目录,ro表示read only(镜像只能读不能修改),与之对应的还有rw(read write)

docker run --name=mynginx -d --restart=always -p 88:80 -v /data/html:/usr/share/nginx/html:ro nginx


如果共享的是多级的目录,可能会出现权限不足的提示。


这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数–privileged=true来解决挂载的目录没有权限的问题。



docker run -di --privileged=true -v /root/test:/usr/local/test --name=mycentos4 centos:7


配置之后,本地的/data/html就是镜像的/usr/share/nginx/html,访问的index.html是本地/data/html中的文件。


docker 经常修改nginx配置文件,所以可以做如下配置,将nginx.conf映射到本地:



docker run -d -p 80:80
-v /data/html:/usr/share/nginx/html:ro
-v /data/conf/nginx.conf:/etc/nginx/nginx.conf
–name mynginx-02
nginx

为了方便,可以先把容器中的nginx.conf复制出来,5eff66eec7e1是镜像的id

docker cp 5eff66eec7e1:/etc/nginx/nginx.conf /data/conf/nginx.conf


### 4.8 文件拷贝


如果我们需要将文件拷贝到容器内可以使用cp命令:



docker cp 需要拷贝的文件或目录 容器名称:容器目录


也可以将文件从容器内拷贝出来



docker cp 容器名称:容器目录 需要拷贝的文件或目录


例:



为了方便,可以先把容器中的nginx.conf复制出来,5eff66eec7e1是镜像的id

docker cp 5eff66eec7e1:/etc/nginx/nginx.conf /data/conf/nginx.conf

把外面的内容复制到容器里面,可以用如下指令

docker cp /data/conf/nginx.conf 5eff66eec7e1:/etc/nginx/nginx.conf


### 4.9 查看容器IP地址


我们可以通过以下命令查看容器运行的各种数据:



docker inspect mycentos2


也可以直接执行下面的命令直接输出IP地址:



docker inspect --format=‘{{.NetworkSettings.IPAddress}}’ mycentos2


### 4.10 删除容器


* 删除指定的容器



删除停止的容器

docker rm 容器id/名字
#强制删除正在运行中的容器
docker rm -f mynginx


* 删除所有的容器:



docker rm docker ps -a -q


### 4.11 查看容器日志



#docker logs 可以查看日志
docker logs 容器名/id 排错




![img](https://img-blog.csdnimg.cn/img_convert/cd4cfaf689d5648fb71604e27beff0c6.png)
![img](https://img-blog.csdnimg.cn/img_convert/07c8a8bcc33ae3ae583a046f7b4ad56d.png)
![img](https://img-blog.csdnimg.cn/img_convert/b9d24c8207a83c31f5ae7f7cb7e03eda.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**



* 删除指定的容器



删除停止的容器

docker rm 容器id/名字
#强制删除正在运行中的容器
docker rm -f mynginx


* 删除所有的容器:



docker rm docker ps -a -q


### 4.11 查看容器日志



#docker logs 可以查看日志
docker logs 容器名/id 排错




[外链图片转存中...(img-qrdeQ5Lv-1715473325641)]
[外链图片转存中...(img-37SejOMt-1715473325641)]
[外链图片转存中...(img-hqZRaNmh-1715473325642)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值