准备工作
内网环境部署项目,配置环境比较繁琐。使用docker导入导出镜像和容器功能,在有网的服务器创建好项目环境并导出,直接在内网服务器导入即可。
离线安装
1、下载docker安装包
在官网下载docker 安装二进制包,选择适合自己的版本。这里下载的是docker-18.06.1-ce.tgz,在centos7中安装。
下载地址: https://download.docker.com/linux/static/stable/x86_64/
2、复制docker-18.06.1-ce.tgz到服务器上
3、准备配置文件
创建并编辑文件
vi docker.service
文件内容
docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
4、创建安装脚本
创建并编辑脚本
vi install.sh
脚本内容
#!/bin/sh
echo '解压tar包...'
sudo tar -xvf $1
echo '将docker目录移到/usr/bin目录下...'
sudo cp docker/* /usr/bin/
echo '将docker.service 移到/etc/systemd/system/ 目录...'
sudo cp docker.service /etc/systemd/system/
echo '添加文件权限...'
sudo chmod +x /etc/systemd/system/docker.service
echo '重新加载配置文件...'
sudo systemctl daemon-reload
echo '启动docker...'
sudo systemctl start docker
echo '设置开机自启...'
sudo systemctl enable docker.service
echo 'docker安装成功...'
docker -v
5、执行脚本安装
sh install.sh docker-18.06.1-ce.tgz
看到版本号即为安装成功
6、创建卸载脚本
创建并编辑脚本
vi uninstall.sh
脚本内容
#!/bin/sh
echo '删除docker.service...'
sudo rm -f /etc/systemd/system/docker.service
echo '删除docker文件...'
sudo rm -rf /usr/bin/docker*
echo '重新加载配置文件'
sudo systemctl daemon-reload
echo '卸载成功...'
7、执行脚本卸载
sh uninstall.sh
卸载成功
制作镜像
1、准备一个简单的eureka服务的jar包
百度网盘链接:https://pan.baidu.com/s/11GegZ_fyyOLpsZ-5sXJr4g ,提取码:qm01
2、上传到服务器
3、制作Dockerfile脚本
vi Dockerfile
脚本内容
echo '指定基础镜像'
FROM openjdk:8-jdk-alpine
echo '定义一个变量,接收入参'
ARG JAR_FILE
echo '复制文件到容器根目录'
COPY ${JAR_FILE} app.jar
echo '暴漏容器运行时的监听端口给外部'
EXPOSE 10086
echo '容器启动时运行得启动命令'
ENTRYPOINT ["java","-jar","/app.jar"]
4、构建镜像
docker build --build-arg JAR_FILE=tensquare_eureka_server-1.0-SNAPSHOT.jar -t eureka:v1 .
- JAR_FILE:jar名称
- eureka:v1:镜像名称和标签
- .:代表在当前目录寻找Dockerfile文件
没有基础镜像的会在第一次运行时拉取镜像。
5、查看镜像是否创建成功
docker images
制作容器
docker run -i --name=eureka -p 10086:10086 eureka:v1
制作时可以看到启动日志,根据日志可以确认项目是否启动成功。启动成功可以退出。
查看创建好的容器
运行容器
1、启动容器
2、开放端口或关闭防火墙
开放端口
firewall-cmd --zone=public --add-port=10086/tcp --permanent
firewall-cmd --reload
关闭防火墙
systemctl stop firewalld
3、访问eureka服务
镜像导入导出
导出镜像
1、导出命令
docker save [options] images [images...]
2、导出镜像到当前目录
docker save -o eureka.tar eureka
3、查看导出的镜像
导入镜像
1、把导出的镜像上传到另外一台内网环境的服务器
2、导入命令
docker load [options]
3、导入当前目录下的镜像
docker load -i eureka.tar
4、导入并查看镜像
制作容器
1、创建容器
docker run -i --name=eureka -p 10086:10086 eureka:v1
制作时可以看到启动日志,根据日志可以确认项目是否启动成功。启动成功可以退出。
2、运行容器
docker start eureka
启动成功
3、访问eureka服务
容器导入导出
导出容器
1、导出命令
docker export [options] container
2、导出容器到当前目录
docker export -o eureka_container.tar eureka
3、查看导出的容器
导入容器
1、删除之前创建的容器
docker rm eureka
容器如果在运行需要停止后再删除
2、把导出的容器上传到另外一台内网环境的服务器
3、导入命令
docker import [options] file|URL|- [REPOSITORY[:TAG]]
3、导入当前目录下的容器
docker import eureka_container.tar eureka:v1
4、导入并查看镜像
制作容器
1、创建容器
docker run -i --name=eureka -p 10086:10086 eureka:v1
报错了:docker: Error response from daemon: No command specified
原因是被docker export出来的镜像在启动的时候需要指定command
把外网服务器中的command内容复制到创建容器命令后面即可。(不需要括号)
最终创建容器命令
docker run -i --name=eureka -p 10086:10086 eureka:v1 java -jar /app.jar
创建成功
2、运行容器
docker start eureka
启动成功
3、访问eureka服务