docker是一個能夠把開發(fā)的應(yīng)用程序自動部署到容器的開源引擎
docker依賴于寫時復(fù)制模型
docker客戶端和服務(wù)器:c/s架構(gòu) docker客戶端連接到守護(hù)進(jìn)程或者服務(wù)器
docker鏡像:比如msyql數(shù)據(jù)庫的鏡像,nginx的鏡像等
registry:保存用戶構(gòu)建的鏡像,公有私有
鏡像是docker生命周期中的構(gòu)建或打包階段,容器是啟動或執(zhí)行階段
1. centos 7 安裝docker
yum -y update
設(shè)置 Docker CE 資源庫:
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast
安裝docker
sudo yum -y install docker-ce
設(shè)置mirror
https://lug.ustc.edu.cn/wiki/mirrors/help/docker
新版的 Docker 使用 /etc/docker/daemon.json 來配置 Daemon
在該配置文件中加入(沒有該文件的話,請先創(chuàng)建一個):從阿里的鏡像上pull
{
"registry-mirrors": ["https://p8b4jflv.mirror.aliyuncs.com";]
}
開放管理端口映射
管理端口在 /lib/systemd/system/docker.service 文件中
將其中第11行的 ExecStart=/usr/bin/dockerd 替換為:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H tcp://0.0.0.0:7654
(此處默認(rèn)2375為主管理端口,unix:///var/run/docker.sock用于本地管理,7654是備用的端口)
將管理地址寫入 /etc/profile
echo 'export DOCKER_HOST=tcp://0.0.0.0:2375' >> /etc/profile
source /etc/profile
啟動docker
systemctl daemon-reload && service docker start
systemctl daemon-reload && service docker restart
sudo docker run hello-world
docker版本
2. docker 使用
docker images查看鏡像
拉centos鏡像
sudo docker pull centos 從阿里鏡像pull就很快
查看centos鏡像
創(chuàng)建容器:基于鏡像centos創(chuàng)建容器,并且進(jìn)入
sudo docker run -i -t centos /bin/bash
-i 保證容器中的STDIN是開啟的
-t 創(chuàng)建容器時分配一個偽終端
exit 退出
查看所有的(-a)/運行的容器 下圖顯示 centos系統(tǒng)的鏡像 已經(jīng)不再運行了
docker run --name refactor -i -t centos /bin/bash,可以通過–name參數(shù)指定這個容器的名稱refactor,以后可以該名稱代替容器ID使用。名稱需要保證唯一性
啟動已經(jīng)停止運行的容器:docker start 容器的名字或ID,可以通過容器的名稱重啟啟動已經(jīng)停止的容器,同樣的使用容器的ID也可以。同樣的restart會重啟一個容器
連接到運行中的容器:docker attach 容器名字或ID docker attach refactor
刪掉容器
docker container rm refactor
docker rm docker ps -a -q
3. docker_case1 使用docker構(gòu)建一個現(xiàn)有的服務(wù)
創(chuàng)建守護(hù)式運行的容器(長期運行的容器)
docker run --name refactor -d centos /bin/bash -c "while true;do echo hello; sleep 1;done”
查看日志
docker logs -ft drefactor
查看進(jìn)程
docker top refactor
工程配置(工程放在服務(wù)器上打包?。?/p>
Dockerfile
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD docker_spring_boot.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar” ]
- VOLUME 指定了臨時文件目錄為/tmp。其效果是在主機(jī) /var/lib/docker 目錄下創(chuàng)建了一個臨時文件,并鏈接到容器的/tmp。改步驟是可選的,如果涉及到文件系統(tǒng)的應(yīng)用就很有必要了。/tmp目錄用來持久化到 Docker 數(shù)據(jù)文件夾,因為 Spring Boot 使用的內(nèi)嵌 Tomcat 容器默認(rèn)使用/tmp作為工作目錄
- 項目的 jar 文件作為 “app.jar” 添加到容器的
- ENTRYPOINT 執(zhí)行項目 app.jar。為了縮短 Tomcat 啟動時間,添加一個系統(tǒng)屬性指向 “/dev/urandom” 作為 Entropy Source
pom.xml
<docker.image.prefix>springboot</docker.image.prefix>
<plugin>
<groupId>org.apache.maven.plugin</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.11</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>
出現(xiàn)問題1:No plugin found for prefix 'docker' in the current project and in the plugin groups
需要maven配置
<pluginGroup>com.spotify</pluginGroup>
打包配置
mvn install打包
jar包和Dockerfile放在同一目錄下
表示把程序中8080端口映射到8083
docker run -d -p 8083:8080 docker
-d表示后臺運行
訪問http://120.79.72.250:8084/sskt/login?username=admin&password=123456成功!
至此,把一個工程注入容器就結(jié)束了
docker ps查看鏡像
停止
docker stop 98d164f20b64
移除
docker rm 98d164f20b64