Docker入门

1. 微服务的持续构建与部署

在这里插入图片描述

2. Docker概念

3. Docker产生背景

3.1物理机时代

物理机-》安装操作系统 -》安装jdk …… 如果需要部署集群,那么就要增加物理机,会带来如下问题:

  1. 硬件成本增加
  2. 资源浪费,不能充分利用物理机的资源
  3. 硬件资源限制
  4. 运维成本

3.2 虚拟机时代

虚拟化技术:
充分利用资源:一台物理机上虚拟出来多个虚拟机去部署,充分利用物理机的磁盘,内存等硬件资源(以虚拟机为单位进行资源隔离)
更容易扩展
在这里插入图片描述
虚拟出来的机器,共享宿主机的物理资源,它可以有自己的操作系统和应用,问题也就在于它还是需要独自占用一个操作系统资源,虚拟机的操作系统资源本质还是宿主物理机的,有没有办法可以独立部署应用而不占用那么多的物理资源? 答案就是Docker

3.3 容器化

容器化:以进程为单位去进行资源隔离
在这里插入图片描述

4. Docker安装

(1)工具安装(需要root权限)
yum install -y yum-utils device-mapper-persistent-data lvm2
在这里插入图片描述
another app is holding the yum 问题处理:http://blog.itpub.net/29812844/viewspace-1988770/
执行rm -f /var/run/yum.pid ,然后重新安装即可

在这里插入图片描述
配置docker镜像源
[root@localhost kkxmoye]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

[root@localhost kkxmoye]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[root@localhost kkxmoye]# yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: base docker-ce-stable extras updates
Cleaning up list of fastest mirrors
[root@localhost kkxmoye]# yum makecache fast
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
 * base: mirrors.njupt.edu.cn
 * extras: mirrors.njupt.edu.cn
 * updates: mirrors.njupt.edu.cn
base               | 3.6 kB  00:00:00     
docker-ce-stable   | 3.5 kB  00:00:00     
extras             | 2.9 kB  00:00:00     
updates            | 2.9 kB  00:00:00     
(1/6): base/7/x86_64/group_gz                  | 153 kB  00:00:00     
(2/6): extras/7/x86_64/primary_db              | 230 kB  00:00:00     
(3/6): updates/7/x86_64/primary_db             | 6.5 MB  00:00:01     
(4/6): base/7/x86_64/primary_db                | 6.1 MB  00:00:01     
(5/6): docker-ce-stable/7/x86_64/updateinfo    |   55 B  00:00:02     
(6/6): docker-ce-stable/7/x86_64/primary_db    |  58 kB  00:00:02     
Metadata Cache Created
[root@localhost kkxmoye]# 

安装docker(默认会选择最近的一个镜像去安装)

[root@localhost kkxmoye]# yum -y install docker-ce

设置开机启动(centos7及以上,使用systemctl命令)

Complete!
[root@localhost kkxmoye]# systemctl start docker     #启动docker
[root@localhost kkxmoye]# systemctl start docker.service    #设置开机启动
[root@localhost kkxmoye]# systemctl enable docker.service    #设置开机启动
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@localhost kkxmoye]# 

如果安装下载较慢,可以配置镜像加速器: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
在这里插入图片描述
vi /etc/docker/daemon.json
添加:

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

然后重启docker:
在这里插入图片描述
sudo systemctl daemon-reload
sudo systemctl restart docker

5. 拉取镜像及镜像启动

下载镜像:
在这里插入图片描述
启动tomcat:
-d 以守护进程方式运行
–name 进程的名字
-p 指定映射的端口 8080:8080 冒号前面的端口号是宿主机的访问端口,冒号后面的端口号是宿主机映射到docker容器上的tomcat的端口号
tomcat 镜像的名称,要和 docker images 命令中显示的镜像名相同,或者用镜像id

[root@localhost kkxmoye]# docker run -d --name first_tomcat -p 8080:8080 tomcat 

在这里插入图片描述
去访问tomcat, 可以看到,能够访问到tomcat,但是找不到tomcat默认的主页,因为docker默认的tomcat的webapps目录下是空的,文件在webapps.dist里面
在这里插入图片描述
在这里插入图片描述

bd500        tomcat              "catalina.sh run"   11 minutes ago      Up 10 minutes       0.0.0.0:8080->8080/tcp   first_tomcat
[root@localhost kkxmoye]# docker exec -it c3b6eb5bd500 /bin/bash  # 登录到docker容器中的tomcat
root@c3b6eb5bd500:/usr/local/tomcat# ls
BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work
root@c3b6eb5bd500:/usr/local/tomcat# mv webapps.dist/* webapps/
root@c3b6eb5bd500:/usr/local/tomcat# 

exit 退出镜像
在这里插入图片描述

再去访问:
在这里插入图片描述

6. Docker常用命令

docker images 查看当前docker中的所有本地镜像
docker ps 查看运行中的容器(镜像一旦启动运行就变成了容器)
docker exec -it containerId /bin/bash 进入docker终端
docker pull [镜像版本] 拉取远程镜像仓库中的image

7. 镜像组成

镜像内部是由不同的层级来组成的:
已经存在的镜像,是可以直接拿来复用,不用再去下载;
在这里插入图片描述
镜像可以叠加:
在这里插入图片描述

  • 联合文件系统
    不同的操作系统,其内核都是相同的,
    在这里插入图片描述
  • 容器特性
    原来的镜像层是只读的,如下图,tomcat的镜像是只读的,当tomcat镜像启动,成为容器后,它会多一个可写层
    在这里插入图片描述

8. 自主构建镜像

构建一个自己的镜像,需要编写一个Dockerfile文件,如下:

FROM openjdk:8   # 构建docker容器的上一层的镜像
MAINTAINER lch@gupaoedu.com
LABEL name="gper-mall-eureka-server" version="1.0" author="lch"  # 标签 版本
WORKDIR /gper/base   # docker工作目录,不存在会创建
EXPOSE 9090  # 容器对外的访问端口
ADD ./spring-cloud-eureka-server-9090-0.0.1-SNAPSHOT.jar ./gper-mall-eureka-server.jar # 从宿主机拷贝到docker容器
ENTRYPOINT ["java","-jar","gper-mall-eureka-server.jar"]   # 

将dockerfile和jar文件上传到宿主机之前,要保证jar包能够独立运行,因此eureka-server的pom中指定启动类:

  <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>

                <!-- 构建docker file 使用,首先要保证jar包能够独立运行 -->
                <configuration>
                    <mainClass>com.gupaoedu.example.springcloudeurekaserver9090.SpringCloudEurekaServer9090Application</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

用java-jar命令执行 jar包,能够正常启动后,将dockerfile和将要构建的jar包上传到宿主机:
在这里插入图片描述
然后执行构建命令: docker build -t gpermall:eureka-server . ( 注意,最后面有个点号)

 [root@localhost app]# docker build -t gpermall:eureka-server .
Sending build context to Docker daemon  48.23MB
Step 1/7 : FROM openjdk:8
8: Pulling from library/openjdk
b9a857cbf04d: Already exists
d557ee20540b: Already exists
3b9ca4f00c2e: Already exists
667fd949ed93: Already exists
661d3b55f657: Already exists
60cfec2a948e: Pull complete
79ee4b4b7121: Pull complete
Digest: sha256:b253b93dc528967eff64ade00a9079dc464fb75b9d27a7a578c8006ca0645de8
Status: Downloaded newer image for openjdk:8
 ---> 8ca4a86e32d8
Step 2/7 : MAINTAINER lch@gupaoedu.com
 ---> Running in 9cc9605e9648
Removing intermediate container 9cc9605e9648
 ---> a7af69e20fc9
Step 3/7 : LABEL name="gper-mall-eureka-server" version="1.0" author="lch"
 ---> Running in 515f6fd6dad1
Removing intermediate container 515f6fd6dad1
 ---> 846479b7b6f8
Step 4/7 : WORKDIR /gper/base
 ---> Running in 179b3155abd8
Removing intermediate container 179b3155abd8
 ---> 28d52adc3d25
Step 5/7 : EXPOSE 9090
 ---> Running in 64d0d4d2bfe3
Removing intermediate container 64d0d4d2bfe3
 ---> de41a352c931
Step 6/7 : ADD ./spring-cloud-eureka-server-9090-0.0.1-SNAPSHOT.jar ./gper-mall-eureka-server.jar
 ---> 7bdf7c12e6a1
Step 7/7 : ENTRYPOINT ["java","-jar","gper-mall-eureka-server.jar"]
 ---> Running in db4ce1c8983b
Removing intermediate container db4ce1c8983b
 ---> e7668b4971ed
Successfully built e7668b4971ed
Successfully tagged gpermall:eureka-server
[root@localhost app]#

启动这个docker镜像:docker run --name eureka-server-9090 -p 9090:9090 gpermall:eureka-server

在这里插入图片描述
然后就可以访问到docker容器上运行的项目了:
在这里插入图片描述

9. Docker持久化——Volume

在启动镜像前,加上-v参数,下面这个命令中的-v参数,表示将容器中的/usr/local/webapps 映射到宿主机上的/tmp/webapps目录下,这样即使容器中的数据删除了,容器下次启动后还是可以读取到webapps目录下的数据
**docker run -d --name tomcat_8080 -p 8080:8080 -v /tmp/webapps:/usr/local/tomcat/webapps tomcat
**

[root@localhost webapps]# docker run -d --name tomcat8080 -p 8080:8080 -v /tmp/webapps:/usr/local/tomcat/webapps tomcat
f90fab2c0966e1a847fa01c238bc302b2bc8ea941fb56a8dfb4d08dbdaabe211
[root@localhost webapps]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
f90fab2c0966        tomcat              "catalina.sh run"   16 seconds ago      Up 15 seconds       0.0.0.0:8080->8080/tcp   tomcat8080
[root@localhost webapps]# docker exec -it f90fab2c0966 /bin/bash
root@f90fab2c0966:/usr/local/tomcat# mv webapps.dist/* webapps/
root@f90fab2c0966:/usr/local/tomcat# ls webapps
ROOT  docs  examples  host-manager  manager
root@f90fab2c0966:/usr/local/tomcat# exit
exit
[root@localhost webapps]# ls /tmp/webapps/
docs  examples  host-manager  manager  ROOT
[root@localhost webapps]#

上面的脚本,通过-v命令启动了tomcat镜像,这里可以看到,镜像容器中的usr/local/tomcat/webapps目录下发生了改变 ,宿主机的/tmp/webapps目录下也对应改变了:
在这里插入图片描述
这里停止并删掉tomcat容器,然后再重新启动tomcat镜像:

[root@localhost webapps]# docker ps
doCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
f90fab2c0966        tomcat              "catalina.sh run"   4 minutes ago       Up 4 minutes        0.0.0.0:8080->8080/tcp   tomcat8080
[root@localhost webapps]# docker stop f90fab2c0966
f90fab2c0966
[root@localhost webapps]# docker rm f90fab2c0966
f90fab2c0966
[root@localhost webapps]# docker run -d --name tomcat8080 -p 8080:8080 -v /tmp/webapps:/usr/local/tomcat/webapps tomcat
aaf8ee487e37cfc0b399e7468747c8d17f12311235c0bb9e614a315636304211
[root@localhost webapps]#

可以发现,上面启动tomcat镜像后没有执行mv webapps.dist/* webapps/ 这个操作,访问tomcat还是能够进入到tomcat主页,说明持久化是生效了的。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值