安装docker以及docker部署微服务示例

在这里插入图片描述

docker介绍

docker是一个开源的容器引擎,有助于更快的交付应用,docker可将应用程序和基础设施层隔离。使用docker可以更快的打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期
1

  • docker daemon(docker守护进程)
    docker daemon是一个运行在宿主机(DOCKER-HOST)的后台进程。可通过docker客户端与之通信
  • client(docker客户端)
    docker客户端是docker的用户界面,他可以接受用户命令和配置表示,并与docker daemon通信。
  • registry(仓库)
    docker registry是一个集中存储于分发镜像的服务。构建完docker镜像后,就可以在宿主机上运行,但如果要在其他机器上运行这个镜像,就需要手动复制。这时候就可以借助docker registry来避免镜像的手动复制。
    一个docker registry可以包含多个docker仓库,每个仓库可以包含多个镜像标签,每个标签对应一个docker镜像。和maven的仓库类似。如果把docker registry比作maven仓库的话,那么docker仓库就可以理解为某个jar包的路径,而镜像标签可以理解为jar包的版本号
  • images(docker 镜像)
    docker镜像是一个只读模板,他包含创建docker容器的说明。他和系统安装官潘类似,使用系统安装光盘可以安装系统。同理,使用docker镜像可以运行docker镜像中的程序
  • container(容器)
    container容器时镜像的可运行实例。镜像和容器的关系类似于面向对象中,类和对象的关系。可以通过相关指令来启动、停止、移动、删除容器

docker安装

docker包含两个版本,社区版ce,企业版ee。下面介绍以社区版为例

以centos为例

1.docker要求centos内核版本高于3.10

2.查看内核版本

uname -r 

3.确保yum包更新到最新

yum -y update 

4.卸载旧版本

yum remove docker docker-common docker-selinux docker-engine 

5.安装需要的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

6.设置yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum缓存  sudo yum makecache fast

7.查看所有仓库中的docker版本,并选择特定版本安装 (社区版)

yum list docker-ce --showduplicates | sort -r 

8.安装docker

sudo yum install docker-ce   #由于repo中默认只开启stable仓库,所以这里安装的是最新最稳定的版本
(指定安装某一版本)sudo yum install <FQPN>  # 例如 sudo yum install docker-ce-19.03.8.ce

9.启动并加入开机启动

systemctl start docker
//查看进程里是否有docker了   ps -ef|grep docker
systemctl enable docker

10.验证安装是否成功(有client和service两部分表示安装成功)

docker version

11.卸载docker

yum -y remove docker-engine
需要配置镜像加速器

由于国内网络问题,需要配置加速器来加速。
借助阿里云的镜像加速器
cd /etc/docker 查看有没有daemon.ison。这是docker默认的配置文件
如果没有就新建,有则修改
vim daemon.json

{
	"registry-mirrors":["https://m9r2r2uj.mirror.aliyuncs.com"]
}

ESC :wq保存退出
重启docker服务

service docker restart

docker官方的镜像仓库 https://hub.docker.com
12.搜索镜像

docker search java
docker search redis
docker search mysql

NAME:镜像仓库名称
DESCRIPTION:镜像仓库描述
STATUS:镜像仓库收藏数,表示该镜像仓库的受欢迎程度,类似于github的stars
OFFICAL:表示是否为官方仓库,[OK]的表示有官方维护
AUTOMETED:表示是否为自动构建的镜像仓库
在这里插入图片描述
13.下载镜像

docker pull java:8  (冒号后面指定版本)

在这里插入图片描述
14.列出镜像

docker images  列出已下载的镜像

在这里插入图片描述
PEPOSITORY:镜像所属仓库名称
TAG:镜像标签。默认latest,表示最新
IMAGE ID:镜像id,表示唯一标识
CREATED:镜像创建时间
SIZE:镜像大小

15.删除本地镜像

docker rmi 镜像id/名称

容器相关命令

1.新建并启动容器

使用以下命令docker run命令即可新建并启动一个容器,该命令是最常用的命令,他有很多选项,下面将列举一些常用的选项

-d选项:表示后台运行

-p选项:随机端口映射
-p选项:指定端口映射,有一下四种格式:
		-- ip:hostPort:containerPort
		-- ip:containerPort
		-- hostPort:comtainerPort
		-- containerPort
-network选项:指定网络模式,该选项有以下可选参数:
		-- network=bridge:默认选项,表示连接到默认的网桥
		-- network=host:容器使用宿主机的网络
		-- network=container:NAME-or-ID:告诉docker让新建的容器使用已有容器的网络配置
		-- network=none:不配置该容器的网络,用户可自定义网络配置
--name:指定容器名称
docker run -d -p 91:80 nginx

这样就能启动一个nginx容器。

这里为docker run添加了两个参数:
-d 后台运行
-p 宿主机端口:容器端口  #开放容器端口到宿主机端口

访问 http://docker宿主机ip:91/ ,将会看到nginx的主界面
(将软件镜像放入容器中运行,容器可以通过宿主机做一个端口的映射,91:80的映射,然后我们的client端就可以访问宿主机来访问所有的盒子容器。我们每个盒子都可以和宿主机做一个端口映射,让client去访问。然后就能对外提供服务了)
在这里插入图片描述
注意:使用docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在该名称的镜像,docker就会自动从docker仓库下载镜像并启动一个docker容器
在这里插入图片描述
再开一个nginx
在这里插入图片描述
在这里插入图片描述
第一个启动的
在这里插入图片描述

2.列出容器
docker ps   

命令可以列出运行中的容器,下面展示的是刚刚启动的两个
在这里插入图片描述
如果需要列出所有容器,包括已停止的容器,可使用-a参数。该列表包含7列,含义如下
-CONTAINER ID:表示容器id
-IMAGE:表示镜像名称
-COMMAND:表示启动容器时运行的命令
-CREATED:表示容器创建的时间
-STATUS:表示容器运行的状态。Up表示运行中,Exited表示已停止
-PORTS:表示容器对外的端口号
-NAMES:表示容器名称。该名称默认由docker生成,也可以使用docker run命令的–name自行指定。例如:
在这里插入图片描述
在这里插入图片描述

3.停止容器

docker stop 容器id/容器名称 (即可停止容器)
例如

docker stop 3511963ace8e

在这里插入图片描述

4.强制停止容器

可使用docker kill 命令发送 SIGKILL信号来强制停止容器

docker kill d00baaf7e05f

在这里插入图片描述

5.启动已停止的容器

使用docker run命令,即可新建并启动一个容器。
对于已经停止的容器,可使用docker start命令来启动

docker start b7231c7ef966

在这里插入图片描述

6.查看容器所有信息
docker inspect b7231c7ef966
[
    {
        "Id": "b7231c7ef966cf511920e63e865f8701f4fdbd62a71f12e4667b802de2ef8da7",
        "Created": "2020-03-13T17:37:46.040094799Z",
        "Path": "nginx",
        "Args": [
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 30805,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-03-13T17:55:53.947286621Z",
            "FinishedAt": "2020-03-13T17:38:13.248784122Z"
        },
        "Image": "sha256:6678c7c2e56c970388f8d5a398aa30f2ab60e85f20165e101053c3d3a11e6663",
        "ResolvConfPath": "/var/lib/docker/containers/b7231c7ef966cf511920e63e865f8701f4fdbd62a71f12e4667b802de2ef8da7/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/b7231c7ef966cf511920e63e865f8701f4fdbd62a71f12e4667b802de2ef8da7/hostname",
        "HostsPath": "/var/lib/docker/containers/b7231c7ef966cf511920e63e865f8701f4fdbd62a71f12e4667b802de2ef8da7/hosts",
        "LogPath": "/var/lib/docker/containers/b7231c7ef966cf511920e63e865f8701f4fdbd62a71f12e4667b802de2ef8da7/b7231c7ef966cf511920e63e865f8701f4fdbd62a71f12e4667b802de2ef8da7-json.log",
        "Name": "/laughing_moser",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "92"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Capabilities": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/445d7ed1ba6433220f530b0d63eceea9257d0568bf810ea150402122c8f46267-init/diff:/var/lib/docker/overlay2/ccb164893d31ec256890955c9a09c7c43619a74baee8308e3d4447683dbfdac4/diff:/var/lib/docker/overlay2/286329cd1ecd59046182f2712e921652488e8ef086e826a3f8c2a484801581db/diff:/var/lib/docker/overlay2/09535fe890e395fd50b3728fb1a2869cda03463776051218d428d73a786e0a97/diff",
                "MergedDir": "/var/lib/docker/overlay2/445d7ed1ba6433220f530b0d63eceea9257d0568bf810ea150402122c8f46267/merged",
                "UpperDir": "/var/lib/docker/overlay2/445d7ed1ba6433220f530b0d63eceea9257d0568bf810ea150402122c8f46267/diff",
                "WorkDir": "/var/lib/docker/overlay2/445d7ed1ba6433220f530b0d63eceea9257d0568bf810ea150402122c8f46267/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "b7231c7ef966",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": true,
            "AttachStderr": true,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.17.9",
                "NJS_VERSION=0.3.9",
                "PKG_RELEASE=1~buster"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "nginx",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGTERM"
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "5f78b6ccb865270464560b95d74a48749c6df9c17a338bbd3928f5b0988aab9b",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "92"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/5f78b6ccb865",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "7c36781d5cb394bcf76aedcf7a30d627ee0f310dd0a5e31e50401228537f790f",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "37d16e5cef3ae8c18a1bef64c4ad1747d241f0131c8734aac70d4bd5bc5db400",
                    "EndpointID": "7c36781d5cb394bcf76aedcf7a30d627ee0f310dd0a5e31e50401228537f790f",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",//容器的ip
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
        }
    }
]

使用浏览器是无法直接访问的
在这里插入图片描述
但是可以通过宿主机来curl一下,说明访问成功
在这里插入图片描述

7.查看容器日志
docker container logs b7231c7ef966

在这里插入图片描述

8.查看容器里的进程
docker top b7231c7ef966

在这里插入图片描述

9.进入容器

使用docker cintainer exec 命令用于进入一个正在运行的docker容器。如果docker run命令运行容器的时候。参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的shell执行命令

docker container exec -it b7231c7ef966 /bin/bash 进入该容器
exit 退出容器

在这里插入图片描述

9.删除容器

使用docker rm可以删除指定容器

.docker rm b7231c7ef966 

该命令只能删除已停止的容器,如需要删除正在运行的容器,则需要使用-f参数

将微服务运行在docker上

使用Dockerfile构建Docker对象

Dockerfile是一个文本文件,其中包含了若干条指令,指令描述了构建镜像的细节
先来编写一个最简单的Dockerfile。以前面的nginx镜像为例,编写一个Dockerfile修改nginx镜像的首页
1、新建文件夹/app,在app目录下新建一个名为Dockerfile的文件,在里面添加一下内容

FROM nginx
RUN echo '<h1>欢迎来到LOL</h1>' > /usr/share/nginx/html/index.html

该命令非常简单,其中的FROM RUN都是Dockerfile的指令。FROM指令用于指定基础镜像,RUN执行命令

2、在Dockerfile所在路径执行一下命令构建镜像

docker build -t nginx:my_nginx .

其中,-t 指定镜像名字,命令最后的(.)表示Dockerfile文件所在的路径
在这里插入图片描述
3、执行以下命令,即可使用该镜像启动一个docker容器

docker run -d -p 95:80 nginx:my_nginx

在这里插入图片描述
4、访问http://docker宿主机ip:95/
在这里插入图片描述

使用Dockerfile构建微服务镜像

。。。未完待续
以一个可运行的jar包构建成docker镜像
1、将jar包上传linux服务器/app/test目录,在jar包所在目录创建名为Dockerfile的文件

2、在Dockerfile中添加以下内容

# 基于哪个镜像
From java:8
# 将本地文件夹挂载到当前容器
VOLUME /tmp
# 复制文件到容器
ADD  xxx.jar(宿主机下你的jar包路径) /app.jar (容器下的路径)
# 声明需要暴露的端口(宿主机对外暴露的端口)
EXPOSE 你的端口号
# 配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","/app.jar"]

3、使用docker build命令构建镜像

docker build -t 镜像名称:标签 Dockerfile文件的相对位置
docker build -t ruoyi-admin:0.0.1 .

在这里使用-t选项指定了镜像的标签。执行该命令后,终端将会输出以下内容:
在这里插入图片描述
在这里插入图片描述
4、启动镜像,加 -d 可以后台启动运行

docker run -p 8080:8080 ruoyi-admin:0.0.1

5、访问http://宿主机ip:8080/

DockerFile常用命令
命令用途
FROM基础镜像文件
RUN构建镜像阶段执行命令
ADD <src> <dest>添加文件,从src目录复制文件到容器的dest,其中src为dockerfile所在目录的相对路径,也可以是一个url,还可以是一个压缩包
COPY拷贝文件,和ADD命令类似,但不支持url和压缩包
CMD容器启动后执行命令
EXPOSE声明容器在运行时对外提供的服务端口
WORKDIR指定容器工作路径
ENV指定环境变量
ENTRYPOINT容器入口,ENTRYPOINT 和CMD 指令的目的一样,为docker容器启动时执行的命令,可多次设置,但只要最新有效
USR该指令用于设置启动镜像时的用户或者UID

docker compose编排微服务做高可用

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值