docker网络和应用发布

8 篇文章 1 订阅
1 篇文章 0 订阅

docker网络

docker网络有三种模式:
1 - none
2 - host
3 - 桥接
本文演示以下内容:
1 - 将应用打包成镜像,并以容器的方式运行;
2 - 容器持久化mysql数据库
3 - 使应用容器可以通过固定名称连接数据库容器,而不是通过ip连接。
基本思路就是:
1 - 创建一个docker内部网络发布应用和数据库
2 - 通过docker的端口映射将服务暴露给外部

1 - 创建docker网络

docker network create --driver bridge --subnet 192.168.45.0/24 --gateway 192.168.45.1 app_net
参数解释:
–driver 网络模式,默认就是桥接
–subnet 子网
–gateway 网管,默认子网第一个IP
此时就创建了一个名为app_net的网络,我们的应用和数据库会发布到这个网络。

2 - 创建MYSQL容器实例

1 - docker pull mysql #拉取最新镜像
2 - docker run -d
–name mysql_8
–net mynet
-v /docker/volume/mysql:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456
mysql #启动实例
参数解释:
-d 以后台方式运行
–name 容器名称。
–net 容器运行在哪个网络下。不指定就是docker0网络,该网络有弊端,比如只能通过ip连接容器,而不能通过容器名称(相当于DNS域名)连接容器,所以生产环境一般不用该网络
-v 数据卷挂载。将本地/docker/volume/mysql:/var/lib/mysql文件夹挂在到容器中/var/lib/mysql文件夹下,/var/lib/mysql中存放的是数据库数据
-e 设置容器环境变量。MYSQL_ROOT_PASSWORD是root用户登录数据库使用的密码
此时,我们可以查看数据库在mynet网络下的IP地址
docker inspect mynet
查看容器的IP
此时,ping 192.168.45.2可以ping通,但是ping mysql_8是ping不通的,所以用容器名表示域名只能用在容器之间,而不能用在宿主机与容器之间。要想宿主机能够识别mysql_8,可以在hosts中配置
192.168.45.2 mysql_8
此时,在宿主机,通过mysql -hmysql_8 -uroot -p123456就可以登录容器中的数据库;或者进入容器之后再登录mysql
2.1 - 进入容器
docker exec -it mysql_8 /bin/bash
2.2 - 在容器中登录数据库
mysql -uroot -p123456
3 - 创建数据库和表

CREATE TABLE student (
    SNO VARCHAR(3) NOT NULL ,
    SNAME VARCHAR(9) NOT NULL ,
    SSEX CHAR(2) NOT NULL 
);
INSERT INTO student VALUES ('001', 'KangKang', 'M ');
INSERT INTO student VALUES ('002', 'Mike', 'M ');
INSERT INTO student VALUES ('003', 'Jane', 'F ');

3 - 创建SpringBoot应用

应用是通过ID查找学生,jar包名称叫app_mysql.jar

应用配置

server:
  port: 9090
  tomcat:
    uri-encoding: UTF-8
  context-path: /web

spring:
  datasource:
    url: jdbc:mysql://mysql_8:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    database: MYSQL
    show-sql: true

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml
  type-aliases-package: com.springboot.bean
logging:
  level:
    com:
      springboot:
        mapper:
          debug
    <select id="selectStudentInfo" parameterType="string" resultType="com.springboot.bean.Student">
        select * from student where sno = #{id}
    </select>
public class Student implements Serializable{
	private String sno;
	private String sname;
	private String ssex;
	//getter  and  setter
}

打包插件
打包

<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<configuration>
					<archive>
						<manifest>
							<addClasspath>true</addClasspath>
							<classpathPrefix>lib/</classpathPrefix>
							<mainClass>com.springboot.Application</mainClass>
						</manifest>
					</archive>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<executions>
					<execution>
						<id>copy-dependencies</id>
						<phase>prepare-package</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<outputDirectory>${project.build.directory}/lib</outputDirectory>
							<overWriteReleases>false</overWriteReleases>
							<overWriteSnapshots>false</overWriteSnapshots>
							<overWriteIfNewer>true</overWriteIfNewer>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

编写Dockerfile文件,文件名字就叫Dockerfile,不能改

FROM java:8
#将app_mysql.jar复制为/home/docker_mysql.jar
ADD docker_mysql.jar /home/docker_mysql.jar
#要和server.port一致
EXPOSE 9090
#容器启动后,内部执行该命令,启动jar包
CMD ["java","-jar","/home/docker_mysql.jar"]

将app_mysql.jar上传到服务器,与Dockerfile放到同一文件夹下,该文件夹下不要有其他文件。在所在文件夹下打包镜像

docker build -t myapp . #注意最后的点

此时执行docker images会看到自己刚刚制作的镜像,。
启动镜像

docker run -d \
	--name myapp_container \
	--net mynet \
	-p 9090:9090 \
	myapp   

验证
curl localhost:9090/web/student?id=001
结果验证

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值