Spring Boot笔记-Spring Boot与Docker(五)

1.简介

Docker是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。它可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像。运行中的这个镜像称为容器,容器启动是非常快速的,容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

之前,我们在Linux上需要安装MySQL,Redis,Tomcat等软件,并做配置,有了Docker后,我们可以直接把这些软件的Docker镜像直接放到Linux上,这些镜像称为容器,它们是安装和配置好的,可以直接拿来使用,简化了Linux上的操作步骤。

2.核心概念

  • Docker主机(Host):安装了Docker程序的机器,Docker可以直接安装在操作系统上
  • Docker客户端(Client):连接Docker主机进行操作
  • Docker仓库(Registry):保存各种打包好的镜像,Docker Hub:https://hub.docker.com/
  • Docker镜像(Image):软件打包好的镜像,放在Docker仓库里
  • Docker容器(Container):镜像启动后的实例称为一个容器,容器是独立运行的一个或一组应用

 使用Docker的步骤:

  1. 安装Docker
  2. 去Docker仓库查找对应的镜像
  3. 使用Docker运行镜像,生成一个Docker容器
  4. 对容器的启动停止就是对软件的启动停止

3.安装Docker

1.安装Linux虚拟机

不会安装的可以看一下这篇博客:https://blog.csdn.net/qq_36059561/article/details/103776262,是一个最小化安装,当然安装完整版也可以,就是下载的时候需要的时间久一些,方法类似。

网络采用桥接的方式连接,开启虚拟机后,用ip addr命令查看ip地址,之后,用MobaXterm连接虚拟机,当然xshell等也可以。

2.在Linux虚拟机里安装Docker

Docker要求CentOS系统内核高于3.10,使用如下命令查看:
[root@localhost ~]# uname -r
3.10.0-1062.el7.x86_64

安装Docker,等待Linux从yum上下载需要的安装包和依赖,中途需要输入y表示确认安装:
[root@localhost ~]# yum install docker

查看Docker版本号:
[root@localhost ~]# docker -v
Docker version 1.13.1, build cccb291/1.13.1

启动Docker:
[root@localhost ~]# systemctl docker start

关闭Docker:
[root@localhost ~]# systemctl docker stop

将Docker设置为开机启动:
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

4.Docker常用命令&操作

1.镜像操作

镜像检索:
docker search 关键词,比如docker search mysql
[root@localhost ~]# docker search mysql
INDEX       NAME                                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/mysql                             MySQL is a widely used, open-source relati...   9417      [OK]
docker.io   docker.io/mariadb                           MariaDB is a community-developed fork of M...   3392      [OK]
docker.io   docker.io/mysql/mysql-server                Optimized MySQL Server Docker images. Crea...   688                  [OK]
docker.io   docker.io/centos/mysql-57-centos7           MySQL 5.7 SQL database server                   74
docker.io   docker.io/mysql/mysql-cluster               Experimental MySQL Cluster Docker images. ...   66
docker.io   docker.io/centurylink/mysql                 Image containing mysql. Optimized to be li...   61                   [OK]
docker.io   docker.io/deitch/mysql-backup               REPLACED! Please use http://hub.docker.com...   41                   [OK]
docker.io   docker.io/bitnami/mysql                     Bitnami MySQL Docker Image                      39                   [OK]
docker.io   docker.io/tutum/mysql                       Base docker image to run a MySQL database ...   34
docker.io   docker.io/schickling/mysql-backup-s3        Backup MySQL to S3 (supports periodic back...   29                   [OK]
docker.io   docker.io/prom/mysqld-exporter                                                              27                   [OK]
docker.io   docker.io/linuxserver/mysql                 A Mysql container, brought to you by Linux...   25
docker.io   docker.io/centos/mysql-56-centos7           MySQL 5.6 SQL database server                   19
docker.io   docker.io/circleci/mysql                    MySQL is a widely used, open-source relati...   19
docker.io   docker.io/databack/mysql-backup             Back up mysql databases to... anywhere!         15
docker.io   docker.io/mysql/mysql-router                MySQL Router provides transparent routing ...   15
docker.io   docker.io/arey/mysql-client                 Run a MySQL client from a docker container      13                   [OK]
docker.io   docker.io/fradelg/mysql-cron-backup         MySQL/MariaDB database backup using cron t...   6                    [OK]
docker.io   docker.io/openshift/mysql-55-centos7        DEPRECATED: A Centos7 based MySQL v5.5 ima...   6
docker.io   docker.io/genschsa/mysql-employees          MySQL Employee Sample Database                  5                    [OK]
docker.io   docker.io/devilbox/mysql                    Retagged MySQL, MariaDB and PerconaDB offi...   3
docker.io   docker.io/ansibleplaybookbundle/mysql-apb   An APB which deploys RHSCL MySQL                2                    [OK]
docker.io   docker.io/jelastic/mysql                    An image of the MySQL database server main...   1
docker.io   docker.io/monasca/mysql-init                A minimal decoupled init container for mysql    0
docker.io   docker.io/widdpim/mysql-client              Dockerized MySQL Client (5.7) including Cu...   0                    [OK]

name:镜像的名称,等下拉取镜像的时候会用到
description:镜像的描述
stars:类似于GitHub的stars,单位是K
OFFICIAL:OK代表官方
AUTO:OK代表自动配置

拉取镜像:
docker pull name[:tag],比如docker pull docker.io/mysql:8
[root@localhost ~]# docker pull docker.io/mysql
Using default tag: latest
Trying to pull repository docker.io/library/mysql ...
latest: Pulling from docker.io/library/mysql

拉取镜像时候,如果不带tag,默认下载latest版本,如果需要带tag,需要在name后跟上:tag即可,tag可以去这里查找:https://hub.docker.com/_/mysql?tab=tags

查看镜像列表:
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     latest              0c27e8e5fcfa        3 days ago          546 MB

删除镜像:
[root@localhost ~]# docker rmi image-id,比如docker rmi 0c27e8e5fcfa
[root@localhost ~]# docker rmi 0c27e8e5fcfa
Untagged: docker.io/mysql:latest

2.容器操作

之前把MySQL的镜像给删掉了,这里使用Tomcat继续学习,首先下载Tomcat的镜像。

根据镜像启动容器:
docker run --name container-name -d image-name,其中--name表示自定义容器名,-d表示后台运行,image-name表示指定进行模板
[root@localhost ~]# docker run --name myTomcat -d tomcat[:tag]
de2f751e89eba475046c8e6502fb2d6b171682f010e827350f2f822cded02264

查看运行中的容器:
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
de2f751e89eb        tomcat              "catalina.sh run"   37 seconds ago      Up 36 seconds       8080/tcp            myTomcat

查看系统中所有容器:
[root@localhost ~]# docker ps -a

启动容器(当系统中有容器的时候):
[root@localhost ~]# docker start 容器id

停止容器:
[root@localhost ~]# docker stop 容器id

删除容器:
[root@localhost ~]# docker rm 容器id

要想使用容器,需要在启动容器的时候,指定镜像的端口映射:
[root@localhost ~]# docker run -d --name myTomcat -p 8080:8080 tomcat[:tag]
这里的-p是用来做端口映射,表示Linux服务器和容器内部端口的映射关系,先写Linux服务器端口,后写容器内部端口。

查看tomcat的启动日志:
docker logs 容器id

此时通过浏览器,访问Linux服务器ip+端口号,就可以看到Tomcat的启动界面了,这里我访问http://192.168.0.123:8080/即可。如果出现了404,检查下防火墙的策略,简单起见,直接关掉,检查下版本号,最新版本可能会出现404,因为新版的webapps下是空的,所以404了,新版本的欢迎页在webapps.dist里面,可以将文件复制到webapps里面,当然也可以换一个版本的镜像,我换了8.5.34就可以看到了。

更多命令详见官网:https://docs.docker.com/engine/reference/commandline/docker/

如果需要启动多个tomcat,那么只需要修改-p参数的Linux服务器端口号即可。如下,可以在Linux的8081,8082,8083上再启动3台Tomcat,它们是互相独立的,互不干扰,实现横向扩展。

[root@localhost ~]# docker run -d --name myTomcat8081 -p 8081:8080 tomcat[:tag]
[root@localhost ~]# docker run -d --name myTomcat8082 -p 8082:8080 tomcat[:tag]
[root@localhost ~]# docker run -d --name myTomcat8083 -p 8083:8080 tomcat[:tag]

3.安装MySQL实例

使用命令docker pull mysql下载mysql的镜像。

错误的启动:

[root@localhost ~]# docker run -d mysql
使用docker ps -a命令会看到mysql的状态是Exited的,所以说启动失败了。

查看mysql启动日志:

[root@localhost ~]# docker logs 3e7d26567ff1
2020-04-27 01:21:28+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started.
2020-04-27 01:21:28+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-04-27 01:21:28+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started.
2020-04-27 01:21:28+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
        You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

根据报错信息,可以得知,启动的时候,需要指定密码参数。于是,将旧的容器删除。

正确的启动:

[root@localhost ~]# docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
77e1684a15333a36e805d1bceb6c9a44d12a2b8696041220be97cf78ab899e2c

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
77e1684a1533        mysql               "docker-entrypoint..."   4 seconds ago       Up 4 seconds        3306/tcp, 33060/tcp   eloquent_clarke

上面的命令,我没有带--name,那么会随机生成一个name,需要注意的点是带上-p参数,-e参数。不带-e会启动失败,不带-p,启动了没法访问。

Docker Hub上关于MySQL的配置:https://hub.docker.com/_/mysql

如果你的MySQL自定义配置文件是/my/custom/config-file.cnf,可以使用以下方式启动容器,这个容器会结合默认配置文件和你指定的配置文件,进行启动。
$ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

如果不想指定配置文件,也可以在启动容器的时候,把需要的参数挂在后面。
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值