提示:就是记录下过程,以下内容都是基操,有问题的确认下版本,目录等因素。
文章目录
前言
因为甲方要求使用容器化部署,没有互联网环境又没有私有容器云环境,所以只能弄一台linux主机最小成本实现容器化部署。故事就要开始了。
提示:以下是本篇文章正文内容,下面案例可供参考
一、怎样无网络安装docker和docker-compose(离线安装)?
1.Linux主机准备(Centos7.6)
内核版本3.1
内核查看命令: uname -a
2.下载安装包
docker下载地址:https://download.docker.com/linux/static/stable/x86_64/
我用的是20.10.9
dockers-compose下载地址:https://github.com/docker/compose/releases
我用的是2.2.3 docker-compose-linux-x86_64
3.上传到Linux主机
使用xshell或者finalshell,在这里推荐下finalshell,国产免费:https://www.hostbuf.com/?from=about。
4.先解压docker压缩包
tar -xvf docker-20.10.9.tgz
5.拷贝到usr/bin目录
# cp docker/* /usr/bin/
6.将docker注册服务
编辑注册服务文件
# vi /usr/lib/systemd/system/docker.service
内容如下,注意ExecStart目录
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
7.重新载入并启动docker服务
# systemctl daemon-reload
# systemctl start docker
8.安装docker-compose
# sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
# sudo chmod +x /usr/local/bin/docker-compose
# docker-compose -v
二、docker简单应用
balabalabala等后期整理ing
为了搭建一个基本符合应用场景的实例环境,我需要用到MSSQL、redis、tomcat,如前言所说都需要在容器内运行。在下载镜像时我使用了一台可以接入互联网的主机,并且安装了docker,当然也可以使用之前装的docker环境去接入互联网并下载。
1.下载镜像
pull命令拉取镜像,通过 https://hub.docker.com/ 页面中的Search框,可以快速找到我要的docker容器;
在检索时还可以选择左侧官方镜像、运行操作系统、架构等选项筛选结果。
进入想要的程序详细页面后可以通过点击TAG标签来选择程序的版本;
诶,这就是下载命令了,在你接入互联网并且安装了docker的主机上运行这个命令就可以下载镜像了
在这里我分别下载了如下几个镜像。
下载MSSQL2019镜像
# docker pull mcr.microsoft.com/mssql/server:2019-latest
下载redis6.2.6镜像
# docker pull redis:6.2.6
下载tomcat9-jdk8镜像
# docker pull tomcat:9.0.60-jdk8
2.转移镜像到没有互联网的docker主机
在这里通过docker save 将下载好的容器打包tar,然后通过shell工具或者U盘拷贝到无互联网环境的主机即可。
# docker save -o sqlsever2019.tar mcr.microsoft.com/mssql/server:2019-latest
# docker save -o redis6.2.6.tar redis:6.2.6
# docker save -o tomcat9.0.60-jdk8.tar tomcat:9.0.60-jdk8
备份到无互联网的docker主机后,使用docker load 来将打包的tar再加载到docker主机镜像中,这里就不逐个写了。
# docker load < *********.tar
load完的镜像通过docker images就可以查看了
# docker images
3.运行容器(看看能运行起来不)
因为啥啥都不会,还是先将容器运行起来,看看服务正常与否;
参照了微软官网文档:https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15&pivots=cs1-bash
运行MSSQL
这里docker使用了如下几个参数:
-e 设置环境变量,后面那环境变量是MSSQL官方文档要加的,应该是接受许可和设置初始化sa密码;
-p 映射端口,前面是docker主机的后面是容器内的;
-d 使用镜像;
-v 挂载docker主机本地路径到容器(为了实现数据持久化);
–privileged=true 说是给容器内的root拥有真正的root权限,应该可以不加。
# docker run --name testmssql \
-e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD= balabalabala \
-p 1433:1433 \
--privileged=true \
-v /home/root/docker-volumes/mssql/data:/var/opt/mssql/data \
-v /home/root/docker-volumes/mssql/log:/var/opt/mssql/log \
-v /home/root/docker-volumes/mssql/secrets:/var/opt/mssql/secrets \
-d mcr.microsoft.com/mssql/server:2019-latest
运行redis
这里运行的redis容器时其实我没有配置文件,在后面的步骤里我们使用dockerfile打包镜像将配置文件塞到容器里,即便没有配置文件,redis也可以使用默认配置正常运行(6379端口,无密码)。
在这 插入一个小插曲,你可以通过docker logs 容器ID 来查看容器的日志,可以看到redis没有找到配置文件并且使用了默认配置的警告日志。
# docker run --name redis \
-p 6379:6379 \
-d redis:6.2.6 redis-server /etc/redis.conf
运行tomcat
在这里运行tocmat容器时我在docker主机 /home/root/docker-volumes/web目录下放了一个小应用,因为使用了挂载的原因,这样tomcat启动后我的小应用就可以被访问了,注意这里我改变了端口,也就是访问tocmat应用时要使用docker主机“http://IPaddress:8805\应用名” 来访问。
# docker run --name tomcat \
-v /home/root/docker-volumes/web:/usr/local/tomcat/webapps \
-p 8805:8080 \
-d tomcat:9.0.60-jdk8
4.DockerFile初体验
在运行上一小节运行redis那部分提到了DockerFile,而上面我的各个容器也可以正常运行,并且各项服务均可以正常访问了。所以开始下一部分的内容重新打包镜像,也就是将官网的镜像加入一些改动,再想使用有自己配置的容器时,运行新的镜像就可以了。
以redis为例构建一个新的镜像
首先在docker主机任意目录创建个DockerFile文件,然后再从官网redis包里抽出一个redis.conf文件。
github用法和dockerhub差不多,就检索呗,然后找到对应的releases版本,总之我下载到了一个满满登登配置的redis.conf,并且简单修改了下requirepass等配置并且并且注释了bind行,为了加密码验证和不绑定IP运行。
建立dockerfile文件
# touch DockerFile
然后将redis.conf放到和dockerfile文件相同目录
# mv redis.conf /root/redis/redis.conf
重点来了,编辑dockerfile文件
# vi DockerFile
FROM 后面的是我redis镜像的ID;
MAINTAINER 就是标注下创建文件人的信息;
COPY 将docker主机当前目录的内容,复制到容器指定目录下;
CMD 执行 redis-server程序时使用指定配置文件。
内容如下:
FROM 0e403e3816e8
MAINTAINER muros<muros@foxmail.com>
COPY redis.conf /etc/redis/redis.conf
CMD [ "redis-server", "/etc/redis/redis.conf" ]
构建完的镜像通过docker images就可以查看了
# docker images
总结
1、在load tar时出现报错问题,提示了找不到****路径,很有可能是tar包不完整导致,重新上传文件尝试解决。
2、在dockerfile构建脚本中 FROM 也可以是镜像名称。
初次编辑于2022年3月30日
2022年3月31日加入简单的docker应用部分。
下次计划增加简单的docker compose应用。