docker是一个能够把开发的应用程序自动部署到容器的开源引擎
docker依赖于写时复制模型
docker客户端和服务器:c/s架构 docker客户端连接到守护进程或者服务器
docker镜像:比如msyql数据库的镜像,nginx的镜像等
registry:保存用户构建的镜像,公有私有
镜像是docker生命周期中的构建或打包阶段,容器是启动或执行阶段
1. centos 7 安装docker
yum -y update
设置 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
设置mirror
https://lug.ustc.edu.cn/wiki/mirrors/help/docker
新版的 Docker 使用 /etc/docker/daemon.json 来配置 Daemon
在该配置文件中加入(没有该文件的话,请先创建一个):从阿里的镜像上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
(此处默认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镜像
创建容器:基于镜像centos创建容器,并且进入
sudo docker run -i -t centos /bin/bash
-i 保证容器中的STDIN是开启的
-t 创建容器时分配一个伪终端
exit 退出
查看所有的(-a)/运行的容器 下图显示 centos系统的镜像 已经不再运行了
docker run --name refactor -i -t centos /bin/bash,可以通过–name参数指定这个容器的名称refactor,以后可以该名称代替容器ID使用。名称需要保证唯一性
启动已经停止运行的容器:docker start 容器的名字或ID,可以通过容器的名称重启启动已经停止的容器,同样的使用容器的ID也可以。同样的restart会重启一个容器
连接到运行中的容器:docker attach 容器名字或ID docker attach refactor
删掉容器
docker container rm refactor
docker rm docker ps -a -q
3. docker_case1 使用docker构建一个现有的服务
创建守护式运行的容器(长期运行的容器)
docker run --name refactor -d centos /bin/bash -c "while true;do echo hello; sleep 1;done”
查看日志
docker logs -ft drefactor
查看进程
docker top refactor
工程配置(工程放在服务器上打包啊)
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。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
- 项目的 jar 文件作为 “app.jar” 添加到容器的
- ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/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>
出现问题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成功!
至此,把一个工程注入容器就结束了
docker ps查看镜像
停止
docker stop 98d164f20b64
移除
docker rm 98d164f20b64