2018年05月08日 16:39:35 閱讀數:328 標籤: Docker 更多java
我的分類: Docker學習linux
版權聲明:本文爲博主原創文章,未經博主容許不得轉載。 https://blog.csdn.net/jlnu_wanglei/article/details/78265365nginx
個人操做系統:Ubuntu14.04,咱們平時安裝docker由於使用的是命令:git
$ sudo apt-get update
github
$ sudo apt-get install -y docker.io
web
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
spring
$ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
docker
若是使用操做系統自帶的包安裝Docker,使用的是比較舊的安裝版本,要使用最新的docker推薦以下方式:
(1)使用阿里雲容器提供的下載:
https://cr.console.aliyun.com/?spm=5176.100239.blogcont29941.12.DMQU50#/accelerator
(2)執行:curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
(3)這裏阿里雲還提供了Docker加速器,能夠看到是修改配置文件,修改鏡像地址,這裏的鏡像地址通過試驗很慢,也是國外的,因此這裏咱們不使用他提供的加速器。咱們使用:https://www.daocloud.io/mirror#
(4)執行:curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://aa09d22e.m.daocloud.io
通過測試這個鏡像加速器仍是很快的。apache
卸載docker,可是會保留鏡像:ubuntu
sudo apt-get purge docker.io
1.建立一個目錄構建環境
mkdir test/web
2.上傳tomcat和jdk到該目錄下
apache-tomcat-7.0.63.tar.gz
jdk-7u76-linux-x64.tar.gz
3.編輯Dockerfile:vim Dockerfile
#pull down centos image
FROM centos
MAINTAINER wanglei_dev@cyou-inc.com
#添加tomcat和jdk到鏡像中
ADD ./apache-tomcat-7.0.63.tar.gz /root
ADD ./jdk-7u76-linux-x64.tar.gz /root
#設置環境變量
ENV JAVA_HOME /root/jdk1.7.0_76
ENV PATH $JAVA_HOME/bin:$PATH
#定義在容器啓動以後的運行程序
ENTRYPOINT /root/apache-tomcat-7.0.63/bin/startup.sh && tail -F /root/apache-tomcat-7.0.63/logs/catalina.out
4.構建鏡像
sudo docker build -t myCentos:tomcat-centos --rm=true .
此時屏幕輸出以下:
Sending build context to Docker daemon 470.4 MB
Sending build context to Docker daemon
Step 0 : FROM centos
---> d83a55af4e75
Step 1 : MAINTAINER test@test.com
---> Running in 955747d64da5
---> 1619dc8f6d58
................
70/logs/catalina.out
---> Running in fe48acf12d70
---> 52076383f11b
Removing intermediate container fe48acf12d70
Successfully built 52076383f11b
注意:-t 選擇指定生成鏡像的用戶名和標籤 --rm=true 指定在生成鏡像過程當中刪除中間產生的臨時容器
5.查看新產生的鏡像
root@ubuntu:/# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
nginx_dockerfile centos 110a02c542ee 2 hours ago 357.9 MB
mycentos tomcat-centos 50a61817c5a4 3 hours ago 502.4 MB
ubuntu latest bd92ca350bbd 14 hours ago 122 MB
centos latest 1c1b67b33c28 3 weeks ago 196.6 MB
6.運行鏡像
[root@wls12c web]$ docker run -d -p 8090:8080 50a6
8260fa22aa32126f613a6b64f121e78545ceae01da58c61396968bfafeda3706
注意:-p指定主機端口8090和容器端口8080綁定,即 -p 主機端口:容器端口 -d指定容器運行後與當前tty分離,後臺運行
最終驗證:經過訪問:http://宿主機IP:8090,便可看見咱們熟悉的tomcat首頁了
1.建立目錄構建nginx環境
mkdir -p /root/nginx_centos
cd /root/nginx_centos
2.準備run.sh文件,用於啓動ssh和apache服務腳本
#!/bin/bash
/usr/sbin/sshd &
/usr/local/nginx/sbin/nginx
注意:這個.sh腳本,最好以#!/bin/bash,我試過寫了一下備註,一直報錯
3.編寫Dockerfile文件
#基於centos生成鏡像
FROM centos
#鏡像建立者信息
MAINTAINER wanglei_dev@cyou-inc.com
#切換目錄
WORKDIR /usr/local/src
#安裝wget
RUN yum install -y wget
#下載並解壓源碼包
RUN wget http://nginx.org/download/nginx-1.8.0.tar.gz
RUN tar -zxvf nginx-1.8.0.tar.gz
WORKDIR nginx-1.8.0
#編譯安裝nginx
RUN yum install -y gcc make pcre-devel zlib-devel
RUN ./configure --prefix=/usr/local/nginx --with-pcre
RUN make
RUN make install
#啓動nginx服務
RUN /usr/local/nginx/sbin/nginx
#修改nginx配置文件,以非daemon方式啓動
RUN echo "daemon off;" >>/usr/local/nginx/conf/nginx.conf
#複製服務器啓動腳本並設置權限
ADD run.sh /usr/local/sbin/run.sh
RUN chmod 755 /usr/local/sbin/run.sh
#設置生成容器時須要執行的腳本
CMD ["/usr/local/sbin/run.sh"]
#開放22,80,443端口
EXPOSE 22
EXPOSE 80
EXPOSE 443
注意:在Dockerfile文件中更換當前目錄不使用cd,要用WORKDIR
4.根據Dockerfile生成鏡像
docker build -t nginx_dockerfile:centos .
5.查看鏡像
root@ubuntu:/# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
nginx_dockerfile centos 110a02c542ee 2 hours ago 357.9 MB
6.根據鏡像生成容器並測試
docker run -d --name myNginxDocker -p 2224:22 -p 8001:80 -p 4443:443 --link myDocker:tomcatDoker nginx_dockerfile:centos
將容器的22端口、80端口和443端口分別映射到到宿主機上的2224端口、8001端口和4443端口 查看新生成的容器:docker ps -a
測試:
curl localhost:8001
同時咱們能夠主機上訪問會看到咱們熟悉的nginx的歡迎界面
7.驗證兩個容器互通
登陸docker容器:
docker exec -it myNginxDocker /bin/bash
ping 咱們剛纔--link後面跟的myDocker:tomcatDoker,這裏是容器名:別名,咱們能夠直接在nginx的容器中:
ping tomcatDoker
1.簡介
Compose
2.安裝
wanglei@ubuntu:~$ sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 617 0 617 0 0 522 0 --:--:-- 0:00:01 --:--:-- 523
0 0 0 0 0 0 0 0 --:--:-- 0:00:21 --:--:-- 0curl: (7) Failed to connect to github-production-release-asset-2e65be.s3.amazonaws.com port 443: Connection refused
咱們能夠看到因爲網絡緣由,鏈接失敗,那麼咱們能夠自行下載相關版本移動到相關目錄
使用echo命令輸出下載地址:
wanglei@ubuntu:~$ echo "https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m`"
https://github.com/docker/compose/releases/download/1.16.1/docker-compose-Linux-x86_64
將下載的文件導入,移動到相關目錄下,並修改權限:
wanglei@ubuntu:~$ sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
wanglei@ubuntu:/usr/local/bin$ sudo chmod +x /usr/local/bin/docker-compose
1.開放API(可選)
由於咱們在開發階段,要不停的構建發佈項目,那麼咱們的測試機器就也要不停地發佈構建,這樣很麻煩,因此這裏咱們開放一個docker的API接口,經過這個接口鏈接到咱們的Maven,這樣就省去了不少構建的時間。
ubuntu下咱們執行以下:
vim /etc/default/docker
DOCKER_OPTS="-H unix:///var/run/docker.sock -H 0.0.0.0:4243"
centos下咱們執行以下:
vim /etc/sysconfig/docker
other_args="-H tcp://0.0.0.0:5555 -H unix:///var/run/docker.sock"
注意:0.0.0.0表示對全部IP都開放相應的端口
2.windows下設置DOCKER_HOST:
環境變量設置以下:
DOCKER_HOST=tcp://192.168.254.132:4243
驗證docker的端口是否已經開放:telnet ip 端口
3.建立springboot項目-pom文件設置插件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>helloworld</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!--docker鏡像前綴-->
<docker.image.prefix>helloworld</docker.image.prefix>
</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>
<finalName>${project.name}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<finalName>${project.name}</finalName>
<fork>true</fork>
</configuration>
</plugin>
<!--docker插件,docker-maven-plugi用於構建maven的Docker image-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.3</version>
<configuration>
<!--指定鏡像名稱-->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!--指定Dockerfile的位置-->
<dockerDirectory>src/main/docker</dockerDirectory>
<!--在構建鏡像的時候使用到的文件須要和Dockerfile放在一塊兒,通常應用jar包須要歸入-->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>
4.建立springboot項目-程序主入口
@SpringBootApplication
@RestController
public class HelloworldApplication {
public static void main(String[] args) {
SpringApplication.run(HelloworldApplication.class, args);
}
@RequestMapping("/")
public String home(){
return "Hello Docker World";
}
}
5.運行程序確保程序沒有問題
編譯:mvn package
運行:java -jar target/docker-spring-boot-1.0.0.jar
訪問項目: http://localhost:8080/
6.將項目容器化
Docker 使用 Dockerfile 文件格式來指定 image 層,編寫Dockerfile,建立文件 src/main/docker/Dockerfile:
#基於那個鏡像
FROM anapsix/alpine-java
#FROM frolvlad/alpine-oraclejdk8:slim
#指定臨時文件目錄爲/tmp
VOLUME /tmp
#拷貝文件到目錄中
ADD helloworld-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
#開放端口
EXPOSE 8080
#環境變量(BOOTAPP_OPTS用於傳入Java運行時的變量,例如test,dev)
ENV BOOTAPP_OPTS ""
#配置容器啓動命令
# docker run -d -p 8080:8080 -e "spring.profiles.active=dev" --name sample helloworld/helloworld
# docker run -d -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=dev" --name sample helloworld/helloworld
ENTRYPOINT java ${BOOTAPP_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar
7.構建Docker Image
運行docker Image:
docker run -p 8082:8080 -t springbootDocker
驗證成功:訪問宿主(主機IP)咱們能夠看到springboot的輸出