1. 官网安装教程
-
Uninstall old versions
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
-
SET UP THE REPOSITORY
sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
-
INSTALL DOCKER ENGINE
sudo yum install docker-ce docker-ce-cli containerd.io
2. 配置docker
-
vim /etc/docker/daemon.json {"exec-opts":["native.cgroupdriver=systemd"],"registry-mirrors":["https://docker.mirrors.ustc.edu.cn/"],"insecure-registries":["172.17.0.8"]} # native.cgroupdriver:k8s的kubelet使用的是systemd驱动。如果要搭建k8s这里需要配置下,修改kubelet配置也可以,相对麻烦点; # registry-mirrors:镜像下载地址,修改为国内地址,加速镜像下载速度; # insecure-registries:docker私有仓库默认是通过https访问的,配置为非安全模式,可以通过http的方式访问私有仓库 #重启docker守护进程 sudo systemctl daemon-reload sudo systemctl restart docker
3. docker常用操作
- docker build 根据dockerfile构建镜像
docker search imageName 搜索镜像(模糊搜索)
docker pull imageName 拉取镜像
docker rmi [-f] imageId/imagename 删除镜像
docker image ls 查看镜像
docker image inspect imageId/imagename 查看镜像的详细信息 - docker 非交互式启动容器 如 docker run -v /demo/logs:/demo/logs --name register --net host devops_register
docker 交互式启动容器 docker run -it devops_register /bin/bash
docker rm [-f] containerId/containerName 删除容器
docker ps 查看所有运行的容器
docker container ls [-a] 查看运行的容器 :-a 查看所有容器
docker container inspect containerId/containerName 查看容器的详细信息 - docker network create networkName 创建网络
docker network connect containerId/containerName networkId/networkName 把容器连接到指定网络上
docker network inspect networkId/networkName 查看网络的详细信息
docker network ls 查看网络 - docker cp source target 把容器中的配置文件拷到宿主机上。然后通过-v 与容器中的文件映射。
通常通过自定义配置文件装软件的时候需要这种操作(不用自定义配置文件的话,可以直接通过docker run -e指定环境变量)
4. 修改启动服务支持远程tcp连接
- find / -name docker.service
-
vim /usr/lib/systemd/system/docker.service
找到ExecStart参数, 修改为 /usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 (默认2375,本人服务器上2375端口有问题)
5. idea 连接远程docker
- 把service窗口添加到工具栏
- 添加docker配置并配置docker,配置好后,双击Docker 或者右键connect 连接远程docker
6. 项目使用docker部署(通过docker启动项目)
- 新建springboot项目(略)并配置dockerfile,内容如下
FROM mcr.microsoft.com/java/jdk:8u272-zulu-centos # jdk环境,最好是提前准备好 ENV JAVA_OPTIONS="" # jvm参数 ADD target/*.jar /app.jar # 运行jar包,ADD 后的jar路径与dockerfile文件路径有关,是相对dockerfile的路径 HEALTHCHECK --interval=60s --timeout=30s --start-period=60s --retries=3 CMD curl -f http://localhost/check/heart || exit 1 # 健康检查 CMD java $JAVA_OPTIONS -jar /app.jar # 主应用启动命令
# 后面只发布不运行的话,需要在服务端执行下面命令启动容器 docker run -d -p 8889:8888 \ -e "JAVA_OPTIONS=-Xmx1024m -Djava.security.egd=file:/dev/./urandom" \ #配置jvm参数 -e "SPRING_PROFILES_ACTIVE=dev" \ # 配置spring应用环境 -v /data/logs/framework:/app/logs # 日志映射到宿主机 --name register register # 前一个register是容器名,后面那个是镜像名
- docker启动配置
- 本地测试通过后,保证target目录下生成部署jar包(项目如果有修改重启项目,jar包不会更新,所以发布前最好用idea上的maven打个包),dockerfile构建容器会用到
7. 通过docker-maven-plugin直接部署镜像到docker,除了共用一个dockerfile外跟6中的内容没有任何关系。
6中直接构建镜像并启动容器,此处只构建镜像并部署到docker,如果要启动容器需要到docker 所在服务器通过docker run 启动
双击package后可以切到service窗口只有镜像没有容器(考虑到网络问题部署到云端docker的话可能会有点慢,耐心点就可以看到理想结果,单机或者本地虚拟机会很快看到结果)
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--指定生成的镜像名-->
<imageName>register</imageName>
<!--指定标签-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 指定 dockerfile 路径,与6中的是同一个dockerfile -->
<dockerDirectory>${project.basedir}</dockerDirectory>
<!--指定远程 docker 暴露的地址-->
<dockerHost>http://ip:2376</dockerHost>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
8. 记录下写这篇文章遇到的坑
docker 默认远程端口(2375)不可用(内网可以,外网死活用不了)。
尝试了tracerout 跟踪请求,telnet 端口,tcpdump抓包,修改腾讯云安全组的入站策略。添加TCP:2375 通过 通通没用
最后实在没办法直接换成了2376端口,问题解决了。。。