Docker demo 演示 - wtdig/study GitHub Wiki
1)、编写spring boot项目
pom.xml文件编写
<modelVersion>4.0.0</modelVersion>
<groupId>com.wt.springboot</groupId>
<artifactId>springbootdemo4</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8
</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8
</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- tag::plugin[] -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>myimage</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>
<!-- end::plugin[] -->
</plugins>
</build>
spring boot入口文件
package cn.wt.springboot;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author wb-wt261136
* @version 2017年10月23日 上午10:28:32
*/
@SpringBootApplication
@RestController
public class WtSpringBootApplication {
@RequestMapping("/hello")
public String home() {
return "docker images bulid springboot";
}
public static void main(String[] args) {
SpringApplication.run(WtSpringBootApplication.class, args);
}
}
2)、编写Dockerfile文件,创建docker镜像
在该项目上创建目录src/main/docker,编写Dockerfile文件:
FROM frolvlad/alpine-oraclejdk8:slim
ADD springbootdemo4-0.0.1.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
注意:springbootdemo4-0.0.1.jar的添加,要和编译的结果一致,打包方式为jar包
解释:
#基础镜像:仓库是java,标签用8u66-jdk
FROM java:8u66-jdk
#当前镜像的维护者和联系方式
MAINTAINER duqi [email protected]
#将打包好的spring程序拷贝到容器中的指定位置
ADD target/bookpub-0.0.1-SNAPSHOT.jar /opt/bookpub-0.0.1-SNAPSHOT.jar
#容器对外暴露8080端口
EXPOSE 8080
#容器启动后需要执行的命令
CMD java -Djava.security.egd=file:/dev/./urandom -jar /opt/bookpub-0.0.1-SNAPSHOT.jar
因为目前的示例程序比较简单,这个dockerfile并没有在将应用程序的数据存放在宿主机上。如果你的应用程序需要写文件系统,例如日志,最好利用VOLUME /tmp命令,这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录。
3)、执行maven的安装命令,运行eclipse中run as 的mvn install命令
4)、开启服务器远程链接,安装dokcer,执行docker version命令,检查docker是否可以使用
5)、在服务器的根目录下创建一个目录dokcertemp,将spring boot的整个工程(springbootdemo4)复制到改目录下
6)、cd springbootdemo4,进入该项目文件中,执行mvn package docker:build命令,如果没有安装maven,先安装一下,等待执行为successs
7)、执行dokcer images执行,查看该创建的镜像文件,执行该docker镜像命令:docker run -p 宿主端口:镜像端口 -t 镜像名称 比如:docker run -p 8098:8080 -t myimage ,打开浏览器,输入地址:http://服务器ip:8098/hello
1)、获取镜像 docker pull [选项] [Docker Registry地址]<仓库名>:<标签>
举例:docker pull ubuntu:14.04 ubuntu为仓库名,14.04为标签,也就是版本号
备注:上面的命令中没有给出 Docker Registry 地址,因此将会从 Docker Hub 获取镜
像。而镜像名称是 ubuntu:14.04 ,因此将会获取官方镜像 library/ubuntu
仓库中标签为 14.04 的镜像。
2)、列出镜像 docker images 列出所有已经下载下来的镜像
列出中间层镜像 docker images -a 显示包括中间层镜像在内的所有镜像的话,需要加 -a 参数
列出指定像 docker images 仓库名 ,例如:docker images ubuntu
3)、制作镜像 Dockerfile
在一个空白目录中,建立一个文本文件,并命名为 Dockerfile
mkdir mydocker
cd mydocker
touch Dockerfile
添加内容:
from 指定基础镜像
run 命令 RUN <命令> ,就像直接在命令行中输入的命令一样
举例:
FROM debian:jessie
RUN buildDeps='gcc libc6-dev make' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/r
edis-3.2.5.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-component
s=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps
首先,之前所有的命令只有一个目的,就是编译、安装 redis 可执行文件。因此没
有必要建立很多层,这只是一层的事情。因此,这里没有使用很多个 RUN 对一一
对应不同的命令,而是仅仅使用一个 RUN 指令,并使用 && 将各个所需命令串
联起来。将之前的 7 层,简化为了 1 层。在撰写 Dockerfile 的时候,要经常提醒自
己,这并不是在写 Shell 脚本,而是在定义每一层该如何构建。
并且,这里为了格式化还进行了换行。Dockerfile 支持 Shell 类的行尾添加 \ 的
命令换行方式,以及行首 # 进行注释的格式。良好的格式,比如换行、缩进、注
释等,会让维护、排障更为容易,这是一个比较好的习惯。
此外,还可以看到这一组命令的最后添加了清理工作的命令,删除了为了编译构建
所需要的软件,清理了所有下载、展开的文件,并且还清理了 apt 缓存文件。这
是很重要的一步,我们之前说过,镜像是多层存储,每一层的东西并不会在下一层
被删除,会一直跟随着镜像。因此镜像构建时,一定要确保每一层只添加真正需要
添加的东西,任何无关的东西都应该清理掉。
很多人初学 Docker 制作出了很臃肿的镜像的原因之一,就是忘记了每一层构建的
最后一定要清理掉无关文件。
4)、构建镜像 docker build [选项] <上下文路径/URL/-> docker build -t nginx:v3 .
比如:在mydocker下有一个Dockerfile文件,进入该命令,执行docker build -t firstDokcer:v1 .
注意: . 代表当前目录
docker build 还支持从 URL 构建,比如可以直接从 Gitrepo 中构建:
docker build https://github.com/twang2218/gitlab-ce-zh.git
1) 问题:docker运行容器时,出现docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. See 'docker run --help'.
解决方法:su root # 先切换到root用户, 再执行以下命令
systemctl enable docker # 开机自动启动docker
systemctl start docker # 启动docker
systemctl restart docker # 重启dokcer
1、创建一个文件夹 mkdir dockerDemo
2、制作镜像文件 vi Dockerfile
from tomcat
copy jpress.war /usr/local/tomcat/webapps/
解释:
from 指定基础镜像
copy 将web程序复制到tomcat的webapps目录下
制作镜像之前,先准备基础镜像,比如tomcat;
https://hub.docker.com/_/tomcat 可以从这个网站查看镜像的相关信息
docker pull tomcat 拉取tomcat镜像文件
还要,准备要运行的web应用程序,本次使用开业的博客(jpress),可以从https://github.com/JpressProjects/jpress/releases下载相应的war包;
下载jpress的war包
wget https://github.com/JpressProjects/jpress/releases/download/v1.0.3/jpress-1.0.3.war
修改名称
mv jpress-1.0.3.war jpress.war
3、构建镜像
docker build -t jpress .
-t 指定制作镜像的名称为jpress . 使用当前目录下的Dockerfile文件进行构建
4、当构建提示成功后,查看是否有镜像生成
docker images
5、运行镜像
docker run - d -p 8888:8080 jpress
-d 后台运行 -p 指定端口 8888 当前服务器端口 8080为镜像tomcat中的端口 jpress 启动容器名称
6、访问地址
www.wtdig.top:8888 tomcat页面出现
www.wtdig.top:8888/jpress 博客页面出现
7、如果需要运行mysql数据库,可以拉取mysql的镜像https://hub.docker.com/_/mysql
docker pull mysql
8、运行mysql
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=wt843518 -e MYSQL_DATABASE=jpress mysql
-e MYSQL_ROOT_PASSWORD=wt843518 用户名root 密码wt843518
-e MYSQL_DATABASE=jpress 数据库名称 jpress
注意:查看容器的运行状态 docker ps
查看网络端口占用 netstat -na|grep 3306
停止容器 docker stop 容器的id