Docker

目录 

一、安装

 二、Docker的常用命令

1.帮助命令

2.镜像命令

3.容器命令

4.常用其它命令

 三、练习

Docker安装Nginx

Docker部署Tomcat

Docker安装nacos

四、可视化管理工具

五、 commit镜像

六、容器数据卷

方式一:直接使用命令来挂载

具名挂载和匿名挂载

方式二:使用Dockerfile文件来构建docker镜像 

七、发布镜像到DockerHub、阿里云

八、子容器和父容器数据同步

九、Docker网络 

十、Redis集群部署

十一、SpringBoot微服务打包Docker镜像

一、安装

1.需要的安装包

yum install -y yum-utils

2.设置阿里云镜像仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.更新yum软件包索引

yum makecache fast

4.安装Docker引擎

yum install docker-ce docker-ce-cli containerd.io

5.启动Docker sudo systemctl start docker

docker version 查看是否安装成功

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.9
 API version:       1.41
 Go version:        go1.16.8
 Git commit:        c2ea9bc
 Built:             Mon Oct  4 16:08:14 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 

6.运行hello-world镜像

[root@iZbp12fj4dxm8z5uofcvshZ ~]# systemctl start docker
[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker run hello-world 

Hello from Docker!
This message shows that your installation appears to be working correctly.

7.查看下载的hello-world镜像

[root@iZbp12fj4dxm8z5uofcvshZ ~]#docker images 
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   4 weeks ago   13.3kB

8.卸载Docker

  • 卸载依赖

yum remove docker-ce docker-ce-cli containerd.io

  • 删除资源

rm -rf /var/lib/docker

/var/lib/docker 是docker的默认工作路径 

9.阿里云镜像加速

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF' {

        "registry-mirrors": ["https://w6f5mrbn.mirror.aliyuncs.com"]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker 

关于这样一个报错信息的解决

[root@iZbp12fj4dxm8z5uofcvshZ ~]# systemctl start docker
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

 解决办法!

[root@iZbp12fj4dxm8z5uofcvshZ ~]# mv /etc/docker/daemon.json /etc/docker/daemon.conf

 二、Docker的常用命令

1.帮助命令

docker info 显示Docker的系统信息,包括镜像和容器的数量

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.6.3-docker)
  scan: Docker Scan (Docker Inc., v0.8.0)

Server:
 Containers: 1
  Running: 0
  Paused: 0
  Stopped: 1
 Images: 1
 Server Version: 20.10.9

docker --help 帮助命令

2.镜像命令

docker images 查看所有本地的主机上的镜像

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   4 weeks ago   13.3kB

REPOSITORY  镜像的仓库源

TAG         镜像的标签

IMAGE ID    镜像的id

CREATED     镜像的创建时间

SIZE        镜像的大小

Options:
  -a, --all           列出所有镜像
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet         只显示镜像的id

docker search 搜索某个镜像

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11603     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4414      [OK]

docker pull 镜像名:[TAG] 下载镜像,TAG不写默认下载lasted

docker pull mysql:5.7 指定版本下载

docker rmi 删除镜像

docker rmi -f 镜像id 删除指定的镜像

3.容器命令(关于启动容器这里我是真的很蒙的!很多博客也没有讲清楚,因此我下定决心参考书籍自己研究)

docker run [可选参数] 镜像名/镜像id

参数说明:

--name="Name"             # 容器名字,用来区分容器

-d                        # 后台运行容器,并返回容器id

-it                       # 使用交互方式运行,当添加这两个参数时,docker为其创建了一个伪终端,这样就可以进入到容器的交互模式(也就是直接进入到容器里面)

-p(小写)                        # 指定端口映射,主机端口 : 容器端口 
      
-P(大写)                      # 随机端口映射

案例1:以交互方式启动一个centos容器(当然你得先拉取镜像)

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

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker run -it --name centos1 centos /bin/bash

[root@9f3688e1173b /]# ls 查看容器内的centos
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

交互模式下我们可以使用exit命令 从centos容器退回到主机,同时centos也跟随着停止运行

[root@2dafac3b7c2d /]# exit
exit

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED       STATUS       PORTS                    NAMES

停止以后,我们希望重启这个centos,下面使用restart(并没有重新进入到容器里面)这个命令来重启,然后用docker ps命令查看,发现是正在运行的!

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker restart f158b967d2d0
f158b967d2d0

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED          STATUS          PORTS                    NAMES
f158b967d2d0   centos               "/bin/bash"              3 minutes ago    Up 18 seconds                            centos1

我们看到上面的演示中,容器确实是重启了, 但是我没有进入到容器里面,这里我们可以使用下面这个命令 docker attach 容器id 来进入(并且牢记一个前提:你所进入的容器是正在运行的)

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker attach f158b967d2d0
[root@f158b967d2d0 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# Ctrl+P+Q
[root@f158b967d2d0 /]# read escape sequence 
[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker ps 
CONTAINER ID   IMAGE                COMMAND                  CREATED          STATUS          PORTS                    NAMES
f158b967d2d0   centos               "/bin/bash"              19 minutes ago   Up 7 minutes                             centos1

同时交互模式下,我们退出容器时可以不使用exit命令,而是使用Ctrl+P+Q来退出,以守护的方式退出容器,这样退出后容器仍然正常运行!

案例2:再演示一下以后台运行的方式启动一个centos容器,这里我们通过-d参数启动了一个centos容器,但是通过docker ps查看当前正在运行的容器时,发现什么都没有,这里我就蒙了,不是以后台运行的方式启动的吗,为啥什么也看不到,我被骗了吗?

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker run -d --name centos01 centos
2d24b41c1baf7242a0759fb697ad9480cb572b3db66a1a37ebb29af778f1673d
[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED       STATUS       PORTS                    NAMES

同时我又做了另外一个实例演示,以后台运行的方式启动redis,这次我又惊呆了,使用docker ps命令查看时,它竟然在运行!!什么鬼! 谁能告诉可怜的娃!centos是有啥特殊的吗?

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker run -d --name redis01 redis
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
eff15d958d66: Pull complete 
1aca8391092b: Pull complete 
06e460b3ba1b: Pull complete 
def49df025c0: Pull complete 
646c72a19e83: Pull complete 
db2c789841df: Pull complete 
Digest: sha256:619af14d3a95c30759a1978da1b2ce375504f1af70ff9eea2a8e35febc45d747
Status: Downloaded newer image for redis:latest
34501681b66c54b40834951fb1075b99c5bc7d95c3f9e334bd3abaf3f6455b54
[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED         STATUS         PORTS                    NAMES
34501681b66c   redis                "docker-entrypoint.s…"   8 seconds ago   Up 6 seconds   6379/tcp                 redis01

在网上查了资料后解释是这样的:docker 容器使用后台运行,就必须要有一个前台进程,否则docker发现没有应用,就会自动停止,好家伙,你听听,这是人能理解的吗?

在阅览众多博客后,我有了自己的解释:这就要提到镜像的构建Dockerfile了,Dockerfile就是用来构建docker镜像的构建文件,里面写的是命令脚本!(这里为了说明这种情况,我先提一嘴)比如下面这个文件,我们在最后写了一条指令CMD /bin/bash,它表示什么意思呢,表示你用这个构建好的镜像启动一个实例时,我要执行这条命令,那这条命令又是干嘛的?其实它相当于给你启动一个命令解释器,并且类型为bash,或者也可以这么认为,你进入容器里面怎么进行交互,是不是要在键盘上敲命令,那谁来解释这些命令,并给你答复呢?就是Dockerfile里面所写的bash类型的shell解释器!

因此,为什么tomcat、nginx、redis这类的镜像在启动一个实例时,用了-d参数,却没有自动停止,是因为启动时执行的CMD指令让它开启了一个前台进程(具体是什么前台进程,我们不需要管),而centos的镜像在启动一个实例时没有CMD指令,好家伙,也就是说啥也不干,那我可就不客气了,你既然啥也不干,我直接给你停掉!这就解释了上面出现的现象!

[root@iZbp12fj4dxm8z5uofcvshZ dockerfile]# vim dockerfile-mycentos
[root@iZbp12fj4dxm8z5uofcvshZ dockerfile]# cat dockerfile-mycentos 
FROM centos
MAINTAINER chen<1424861923@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash

并且我注意到,如果你加上了-d参数,后面再加命令如/bin/bash,其实这条命令是无效的,因为已经指定了是在后台运行,那么这条命令便不会再起作用! 

以守护形式运行容器

Ctrl+P+Q 我们执行完需要的操作退出容器时,不要使用exit退出,可以使用Ctrl+P+Q代替,以守护的方式退出容器

查看容器

  • docker ps [可选项] 列出当前正在运行的容器
-a 列出当前所有正在运行的容器+历史运行过的容器
-l 显示最近创建的容器
-q 静默模式,只显示容器id

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  • docker ps -a 列出当前正在运行的容器,并且显示历史运行过的容器
[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS                     PORTS     NAMES
9f3688e1173b   centos        "/bin/bash"   8 minutes ago   Exited (0) 4 minutes ago             cranky_hoover
dceccbdd68ef   hello-world   "/hello"      3 days ago      Exited (0) 3 days ago                hungry_feynman

docker rm 容器id 删除指定容器,不能删除正在运行的容器

docker rm -f 容器id</

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小馒头爱学Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值