Docker深入

本文详细介绍了Docker的基础操作,包括如何打开帮助文档、拉取和设置镜像(如MySQL)加速、常用命令如删除镜像、管理容器,以及数据卷的使用。此外,还讲解了DockerFile的创建和容器数据卷的共享,强调了数据持久化的重要性,并提供了实战操作示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

即上篇,初识Docker后,本篇带来Docker的常用命令细解
相信最初学Docker的目的就是为了简化安装吧兄弟萌,接下来就开干,坑我来踩,干就完事啦!
下篇即安装搭建环境!!!!

1.首先打开帮助文档

1.先打开帮助文档

帮助文档
在这里插入图片描述

2.拉取Mysql

1.搜索Mysql

在这里插入图片描述
在这里插入图片描述

2.拉取镜像

# 这个命令表示默认拉取最新版
docker pull mysql    
#指定版本 指定的版本
docker pull mysql:5.7

妈的,没设置加速之前好慢好慢,因为访问的是国外的
在这里插入图片描述

2.1设置一下国内官方镜像

在使用时,Docker 中国官方镜像加速可通过 registry.docker-cn.com 访问。该镜像库只包含流行的公有镜像。私有镜像仍需要从美国镜像库中拉取。

修改修改 /etc/docker/daemon.json,当然啦你可能没有这个json,没关系,我也没有,所以我们直接创建一个就好了,在这个json里面复制这个进去

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

重启docker使他生效

systemctl restart docker

再次拉取 ,芜湖 起飞
在这里插入图片描述

4.Docker常用命令

1.删除镜像

现在拉取镜像咱们已经学会了是不是也得会删除呢?

#删除指定镜像
docker rmi -f 镜像id
#删除全部镜像
docker rmi -f ${docker images -aq }

删除指定镜像
在这里插入图片描述

2.容器命令

说明︰我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习

docker pull  centos

3.新建容器并启动

docker run [可选参数]image
#参数说明
--name="Name"       容器名字tomcat01 tomcat02,用来区分容器
-d  				后台方式运行
-it					使用交互方式运行,进入容器查看内容
-p					指定容器的端口-p 8080:8080
	-p ip:主机端口:容器端口
	-p    主机端口:容器端口(常用)-p容器端口
	      容器端口
-P  				随机端口

套娃套娃套娃啦兄弟们
运行并进入容器
在这里插入图片描述
退出容器
在这里插入图片描述
查看docker运行过得容器 与正在运行的容器命令

docker ps
docker ps -a
				-n=?   表示最近创建的的容器
				-q      只显示容器的编号

在这里插入图片描述

4.退出容器

exit 直接退出容器
ctrl+P+Q 退出容器但不停止

在这里插入图片描述

5.删除容器

docker rm 容器id    只能删除没运行的 删除运行会报错
docker rm -f $(docker ps -aq)  删除所有容器 正在运行的也能删除
docker ps -a -q|xargs docker rm    删除所有的容器

在这里插入图片描述
在这里插入图片描述

6.启动和停止容器的操作

docker start      容器id			#启动容器
docker restart   容器id			#重启容器
docker stop      容器id			#停止当前正在运行的容器
docker kill         容器id			#强制停止当前容器

docker run -d centos 确发现
docker ps 没有正在运行的容器???
问题docker ps,发现centos停止了
常见的坑: docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止 nginx,容器启动后,发现自己没有提供服务,就会立刻停止
进入正在运行的容器

docker exec -it  容器id /bin/bash

docker attach  容器id  进入容器正在运行的行

7.将容器内的文件 拷贝到主机

进入容器内,创建一个文件,退出容器并不会使数据丢失 删除容器才会丢失

[root@VM-8-7-centos /]# docker attach 66140df7b61c
[root@66140df7b61c /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@66140df7b61c /]# cd home
[root@66140df7b61c home]# ls
[root@66140df7b61c home]# touch linlin.java
[root@66140df7b61c home]# ls
linlin.java
[root@66140df7b61c home]# ^C
[root@66140df7b61c home]# exit
exit
[root@VM-8-7-centos /]# docker ps -aq
66140df7b61c
7f02c16917b7
[root@VM-8-7-centos /]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                            PORTS     NAMES
66140df7b61c   centos    "/bin/bash"   6 minutes ago   Exited (130) About a minute ago             bold_goldberg
7f02c16917b7   centos    "/bim/bash"   6 minutes ago   Created                                     musing_dijkstra
[root@VM-8-7-centos /]# docker cp 66140df7b61c:/home/linlin.java /usr/local/src
[root@VM-8-7-centos /]# cd /usr/local/src
[root@VM-8-7-centos src]# ls
linlin.java
[root@VM-8-7-centos src]# 

小结

在这里插入图片描述

5.docker 的提交

1.docker打包提交自己创造的镜像

docker commit -a="提交人"  -m="提交的信息 或者叫备注" 容器id  创建的镜像名 

6.容器数据卷(很重要)

1.容器数据卷

1.容器数据卷 通俗来说就是: 把容器内的文件夹跟主机进行挂载,类似vue的双向绑定,一边发生变化另一边也跟着变化。借此实现数据共享,数据持久化
还看不懂?
再简单一点 ,你有A文件夹,我有B文件夹,我们进行了挂载,我创建一个xiaolin.java文件,你什么都不用干但是也多了一个xiaolin.java文件。这就是容器数据卷!!!

#创建一个容器并跟主机指定文件夹进行挂载
docker run -d -v /主机目录/:/容器目录 centos
-v可以有多个 可以有多个挂载

2.具名挂载

#具名挂载 -v 名称:/容器名
[root@VM-8-7-centos /]# docker run  -it -v xiaolin:/home centos 
[root@VM-8-7-centos /]# docker volume ls
DRIVER    VOLUME NAME
local     64b4306de114aa5aa6448044d1f6e1eadc76b23a6c8df946b8b71b2c37bec698
local     64f5657cc4084a0b83e585f6757e768b5b8adb774c91b1f720e1fa341fe179ae
local     xiaolin
#查看指定容器名的状态
[root@VM-8-7-centos /]# docker volume inspect xiaolin
[
    {
        "CreatedAt": "2021-01-29T15:09:41+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/xiaolin/_data", 主机地址
        "Name": "xiaolin",
        "Options": null,
        "Scope": "local"
    }
]
[root@VM-8-7-centos /]# 


3.匿名挂载

#匿名挂载
[root@VM-8-7-centos volumes]# docker run -d  -v /home centos
952fe1b6a34d04ed7ba805c7f93b7d38412024205615b94d8e70f46e8502b741
#查看所有的数据卷
[root@VM-8-7-centos /]# docker volume ls
DRIVER    VOLUME NAME
local     64b4306de114aa5aa6448044d1f6e1eadc76b23a6c8df946b8b71b2c37bec698
local     64f5657cc4084a0b83e585f6757e768b5b8adb774c91b1f720e1fa341fe179ae
local     xiaolin
#查看指定的数据卷
[root@VM-8-7-centos /]# docker volume inspect 64b4306de114aa5aa6448044d1f6e1eadc76b23a6c8df946b8b71b2c37bec698
[
    {
        "CreatedAt": "2021-01-29T11:03:06+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/64b4306de114aa5aa6448044d1f6e1eadc76b23a6c8df946b8b71b2c37bec698/_data",
        "Name": "64b4306de114aa5aa6448044d1f6e1eadc76b23a6c8df946b8b71b2c37bec698",
        "Options": null,
        "Scope": "local"
    }
]
[root@VM-8-7-centos /]# 

7.DockerFile

Dockerfile就是用来构建docker镜像的构建文件!命令脚本!先体验一下!
通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!

1.创建一个自己的镜像

#按顺序执行
cd /home
mkdir docker-test-volume
vim dockerfile01
#脚本内容
FROM centos

VOLUME ["volum01","volume02"]

CMD echo "------end---------"
CMD /bin/bash

# 生成一个自己的镜像
[root@VM-8-7-centos docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile01 -t xiaolin/centos1.0 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 300e315adb2f
Step 2/4 : VOLUME ["volum01","volume02"]
 ---> Running in d01be81f85bb
Removing intermediate container d01be81f85bb
 ---> 410e0c7971af
Step 3/4 : CMD echo "------end---------"
 ---> Running in 418cf8c30dac
Removing intermediate container 418cf8c30dac
 ---> b837e1c0d654
Step 4/4 : CMD /bin/bash
 ---> Running in e22f763735df
Removing intermediate container e22f763735df
 ---> 2e7e3038db1f
Successfully built 2e7e3038db1f
Successfully tagged xiaolin/centos1.0:latest
You have new mail in /var/spool/mail/root
[root@VM-8-7-centos docker-test-volume]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
xiaolin/centos1.0     latest    2e7e3038db1f   41 seconds ago   209MB
mytomcat1.0           latest    2d62d63e824d   4 hours ago      654MB
tomcat                9.0       345867df0879   8 days ago       649MB
tomcat                latest    345867df0879   8 days ago       649MB
mysql                 5.7       a70d36bc331a   10 days ago      449MB
redis                 latest    621ceef7494a   2 weeks ago      104MB
nginx                 latest    f6d0b4767a6c   2 weeks ago      133MB
centos                latest    300e315adb2f   7 weeks ago      209MB
portainer/portainer   latest    62771b0b9b09   6 months ago     79.1MB

2.启动镜像 查看挂载信息

#查看镜像
[root@VM-8-7-centos docker-test-volume]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
xiaolin/centos1.0     latest    2e7e3038db1f   41 seconds ago   209MB
mytomcat1.0           latest    2d62d63e824d   4 hours ago      654MB
tomcat                9.0       345867df0879   8 days ago       649MB
tomcat                latest    345867df0879   8 days ago       649MB
mysql                 5.7       a70d36bc331a   10 days ago      449MB
redis                 latest    621ceef7494a   2 weeks ago      104MB
nginx                 latest    f6d0b4767a6c   2 weeks ago      133MB
centos                latest    300e315adb2f   7 weeks ago      209MB
portainer/portainer   latest    62771b0b9b09   6 months ago     79.1MB

#启动自己的镜像
[root@VM-8-7-centos docker-test-volume]# docker run  -it   2e7e3038db1f 
[root@74ac8203c101 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volum01  volume02
[root@74ac8203c101 /]# 

在这里插入图片描述
因为挂载的方式是匿名镜像 所以我们去找他的主机的地址看看是否成功了

进入数据卷创建一个文件
[root@18b25d82c16e /]# cd volum01
[root@18b25d82c16e volum01]# touch xiaolin.java
[root@18b25d82c16e volum01]# ls
xiaolin.java
[root@18b25d82c16e volum01]# 
#先退出容器  
#查看状态 找到mounts
[root@VM-8-7-centos docker-test-volume]# docker inspect 18b25d82c16e

在这里插入图片描述

#完成
[root@VM-8-7-centos docker-test-volume]# cd /var/lib/docker/volumes/2452d4b206cbf510bc9f887f1e03e577256f28ecc586e3118885212210f9345d/_data
[root@VM-8-7-centos _data]# ls
xiaolin.java
[root@VM-8-7-centos _data]# 

8.数据卷容器(很重要)

什么是数据卷容器很好理解吧兄弟们,就是被别的容器挂载的父容器,叫数据卷容器。
给大家画张图吧
在这里插入图片描述
操作命令

#先创建一个容器
[root@VM-8-7-centos docker-test-volume]#
 docker run -it --name docker01  xiaolin/centos1.0 /bin/bash
#在创建第二个容器的时候指定数据卷
[root@VM-8-7-centos docker-test-volume]# 
docker run -it --name docker02  --volumes-from docker01    xiaolin/centos1.0

测试
在这里插入图片描述
在这里插入图片描述
哪怕把docker01容器删除数据也不会丢失哦,想挂载多个也是没问题的呀我就没写了奥兄弟们

容器数据卷之间的共享

--volumes from 容器名

9.DockerFile 详解(很重要)

1.DockerFile是什么

DockerFile是用来创建镜像的一个文件! 命令参数的脚本!!!
构建步骤
1.编写一个dockerfile文件
2.docker build 构建成一个镜像
3.docker run 运行镜像
4.docker push 发布镜像到 docker hub 或者阿里云镜像仓库
我们先打开Docker Hub
搜一个来看看
在这里插入图片描述
再随便点击一个版本,他会跳到Git hub

在这里插入图片描述
看,他是不是跟我上面写的脚本类似!!
接下来找了一张百度的图详细解释 DockerFile里面的命令
在这里插入图片描述
这个也不错
在这里插入图片描述

基础知识:

1.每个关键字都必须是大写字母!
2.从上到下的执行顺序
3.#表示注释
4.每一个指令都会创建新的镜像层并提交!
在这里插入图片描述
步骤:开发 部署 运维

DockerFile:构建文件,定义一切的源代码
DockerImages:通过DockerFile生成的镜像,最终发布和运行项目
Docker容器:容器就是运行镜像提供服务的服务器

2.DockerFile的指令

FROM 基础镜镜像 一切从这里开始
MAINTAINER 告诉别人是谁写的 姓名 邮箱
RUN 镜像构建的时候需要执行的命令
ADD 添加内容 压缩包
WORKDIR 镜像的工作目录
VOLUME 挂载的目录
EXPOSE 暴露的端口配置
CMD 指定容器启动运行启动的命令,只有最后一个会生效 ,可替代
ENTRYPOINT 指定容器启动运行启动的命令,可以追加命令
ONBUILD 当构建一个被继承的DockerFile这个时候就会运行这个命令
COPY 类似ADD 将文件拷贝到镜像里面
ENV 构建的时候设置环境变量
懂了这些来联系一下兄弟们

3.练习

实战测试Tomcat,JDK镜像编写

Docker Hub中99%镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行的构建

在这里插入图片描述
1.准备tomcat,JDK的jar压缩包
在这里插入图片描述
2.编写dockerfile文件

列出本地镜像变更历史

[root@VM-8-7-centos src]# docker history 镜像id
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
621ceef7494a   2 weeks ago   /bin/sh -c #(nop)  CMD ["redis-server"]         0B        
<missing>      2 weeks ago   /bin/sh -c #(nop)  EXPOSE 6379                  0B        
<missing>      2 weeks ago   /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B        
<missing>      2 weeks ago   /bin/sh -c #(nop) COPY file:df205a0ef6e6df89…   374B      
<missing>      2 weeks ago   /bin/sh -c #(nop) WORKDIR /data                 0B        
<missing>      2 weeks ago   /bin/sh -c #(nop)  VOLUME [/data]               0B        
<missing>      2 weeks ago   /bin/sh -c mkdir /data && chown redis:redis …   0B        
<missing>      2 weeks ago   /bin/sh -c set -eux;   savedAptMark="$(apt-m…   30.6MB    
<missing>      2 weeks ago   /bin/sh -c #(nop)  ENV REDIS_DOWNLOAD_SHA=79…   0B        
<missing>      2 weeks ago   /bin/sh -c #(nop)  ENV REDIS_DOWNLOAD_URL=ht…   0B        
<missing>      2 weeks ago   /bin/sh -c #(nop)  ENV REDIS_VERSION=6.0.10     0B        
<missing>      2 weeks ago   /bin/sh -c set -eux;  savedAptMark="$(apt-ma…   4.15MB    
<missing>      2 weeks ago   /bin/sh -c #(nop)  ENV GOSU_VERSION=1.12        0B        
<missing>      2 weeks ago   /bin/sh -c groupadd -r -g 999 redis && usera…   329kB     
<missing>      2 weeks ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B        
<missing>      2 weeks ago   /bin/sh -c #(nop) ADD file:422aca8901ae3d869…   69.2MB 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值