Docker 的基本使用

学习目标

  • 为什么要使用Docker
  • Docker简介
  • 安装Docker
  • Docker的基本使用
  • Docker安装MySQL
  • 部署SpringBoot应用到Docker

1、为什么要使用Docker

  在开发过程中,往往程序在自己的电脑上跑的起来,放到别人电脑上却不行了,
因为一个项目跑起来,需要大量程序的支持,包块:jdk,Tomcat,MySQL,Redis,Nginx等等,而每个人的电脑上版本可能不同,这就很容易导致项目跑不起来。

2.Docker简介

在这里插入图片描述

2.1Docker是什么

  • Docker 是一个开源的应用容器引擎

  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

  • 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

2.2 Docker的应用场景

  • Web 应用的自动化打包和发布。

  • 自动化测试和持续集成、发布。

  • 在服务型环境中部署和调整数据库或其他的后台应用。

  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

2.3 Docker的架构

在这里插入图片描述
重要概念:

  • Host 主机(运行Docker的服务器)

  • Daemon 守护进程(在后台执行Docker的操作)

  • Registry 仓库服务注册(远程服务器,保存大量仓库)

  • Repository 仓库(保存镜像文件的位置)

  • Image 镜像(保存进程或软件的文件)

  • Container 容器(镜像运行后的进程)

2.4Docker 的优点

  Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

3.安装Docker

1、删除旧版本的docker

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-selinux \
    docker-engine-selinux \
    docker-engine

2、安装依赖包

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

3、安装docker

yum install docker

4、启动docker

systemctl enable docker
systemctl start docker

5、查看安装结果

docker version

6、配置镜像

加速镜像下载,创建或修改 /etc/docker/daemon.json 文件,修改为如下形式

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

7、重启

systemctl restart docker

4、Docker的基本使用

常用Docker命令

  1. 查看镜像: docker images
  2. 搜索镜像: docker search 镜像名称
  3. 查看容器:docker ps
  4. 停止容器:docker stop 容器id
  5. 删除容器:docker rm 容器id
  6. 删除镜像:docker rmi 镜像id
  7. 运行镜像:docker run 镜像id
  8. 拉取镜像:docker pull 镜像名
  9. 创建镜像:docker build 镜像名 .
  10. 抓取仓库:docker pull library/hello-world
  11. 查看镜像:docker images
  12. 运行镜像:docker run hello-world

5.Docker安装MySQL

1.安装MySQL

docker pull mysql:8.0	

2.运行MySQL镜像

docker run  -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql的镜像ID

-p 后面的端口是本机端口,映射到docker中MySQL的3306端口,后面设置了root密码

-d 是后台运行

3.查看容器ID

docker ps

4.上传数据库脚本到Linux,然后将脚本复制到docker的root目录中

docker cp erp.sql 21db7dd6618e:\root

erp.sql:数据库名称
21db7dd6618e:是数据库容器id

5.进入docker容器

docker exec -it  21db7dd6618e bash

6.进入MySQL

mysql -uroot -p123456

7.设置编码、创建数据库

set names utf8;
create database erp;
use erp;

8.导入sql脚本

source /root/erp.sql;

9.修改远程访问权限:

select host,user,plugin,authentication_string from mysql.user;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

10.看数据库是否有数据

select * from user

最后exit就可以了

6.部署SpringBoot应用到Docker

1.首先在springboot项目的pom.xml文件中添加Docker镜像名称:

<properties>
    <docker.image.prefix>springboot</docker.image.prefix>
</properties>

在plugin中添加docker构建插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!-- Docker maven plugin -->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                <dockerDirectory>src/main/docker</dockerDirectory>
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
        <!-- Docker maven plugin -->
    </plugins>
</build>

2. 创建Dockerfile文件

FROM java:8
VOLUME /tmp
COPY jar文件名 app.jar
RUN bash -c "touch /app.jar"
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=test", "--server.port=8080", "> /log/app.log"]

内容讲解:

FROM java:8是获取到远程仓库的jdk1.8镜像。

VOLUME指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录。效果就是在主机的/var/lib/docker目录下创建了一个临时文件,并连接到容器的/tmp。

将项目的jar文件复制为app.jar添加到容器

RUN表示在新创建的镜像中执行一些命令,然后把执行的结果提交到当前镜像。这里使用touch命令来改变文件的修改时间,Docker创建的所有容器文件默认状态都是“未修改”。这对于简单应用来说不需要,不过对于一些静态内容(比如:index.html)的文件就需要一个“修改时间”。

EXPOSE 容器暴露端口

ENTRYPOINT 应用启动命令 参数设定

3. 创建docker文件夹,将jar包与Dockerfile移动到该文件夹,进入该文件夹,运行命令:

docker build -t 镜像名称  .

4.查看镜像

docker images

5.运行镜像

docker run --rm -p 8080:8080 --link mysql容器ID:localhost docker镜像名称或ID

–rm 表示容器会自动删除

-p表示端口映射,冒号左边为docker容器外的端口号,右边为容器内的端口号

-d表示后台运行

–link 表示连接mysql容器(如果项目不需要数据库,可以去掉),冒号左边是mysql容器的id后面是容器的别名,这样jdbcUrl中配置的localhost会转换到mysql的docker容器上

解决Docker不能联网问题

启动项目后如果出现下面提示,表示Docker的网络出现问题
在这里插入图片描述
解决方法

vi /etc/sysctl.conf

添加ipv4转发

net.ipv4.ip_forward=1

重启网络

service network restart

重新启动Docker镜像后通过浏览器测试在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值