文章目录

  • Linux离线安装docker
  • 在docker中离线安装nginx容器
  • 在docker中离线安装redis容器
  • 在docker中离线安装MySQL容器
  • 资源分享


Linux离线安装docker

将docker镜像上传到服务中

docker离线镜像nginx docker离线安装部署 linux_docker


解压镜像

tar -zxvf docker-20.10.5.tgz

将解压出来的docker文件复制到 /usr/bin/ 目录下

cp docker/* /usr/bin/

进入/etc/systemd/system/目录,并创建docker.service文件

cd /etc/systemd/system
touch docker.service

编辑docker.service文件,将以下内容复制

vi docker.service

注意: --insecure-registry=192.168.200.128 此处改为你自己服务器ip

[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 --selinux-enabled=false --insecure-registry=192.168.200.128
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

给docker.service文件添加执行权限

chmod 777 docker.service

重新加载配置文件(每次有修改docker.service文件时都要重新加载下)

systemctl daemon-reload

启动

systemctl start docker

设置开机启动

systemctl enable docker.service

查看docker状态

systemctl status docker

出现下面这个界面就代表docker安装成功。

docker离线镜像nginx docker离线安装部署 linux_docker离线镜像nginx_02

在docker中离线安装nginx容器

将nginx镜像上传到服务器中

docker离线镜像nginx docker离线安装部署 linux_linux_03

在docker中导入镜像

docker load -i 镜像名.tar

docker离线镜像nginx docker离线安装部署 linux_linux_04


查看镜像

docker离线镜像nginx docker离线安装部署 linux_nginx_05


给镜像重命名

docker tag 镜像名id  命名的镜像名:版本

latest:表示最新的,使用镜像名直接启动容器时默认使用该版本

docker离线镜像nginx docker离线安装部署 linux_nginx_06


在home下面创建分别创建以下四个目录

mkdir -p /home/nginx/conf 挂载容器里面的配置,即nginx.conf

mkdir -p /home/nginx/conf.d 挂载容器里面的子配置,即nginx.conf里面include的配置文件

mkdir -p /home/nginx/logs 挂载容器里面的代理的日志文件

mkdir -p /home/nginx/html 挂载容器里面的界面的访问

挂载:即将宿主的文件和容器内部目录相关联,相互绑定,在宿主机内修改文件的话也随之修改容器内部文件

启动nginx(先不挂载nginx.con配置文件)

docker run -d -p 80:80 --name nginx -v /home/nginx/logs:/var/log/nginx nginx

docker离线镜像nginx docker离线安装部署 linux_nginx_07

docker ps 查看正在运行的容器
docker ps -a 查询所有容器(正在运行和其他状态的)

使用浏览器访问nginx

docker离线镜像nginx docker离线安装部署 linux_nginx_08


使用如下命令进入交互式终端:

docker exec -it nginx /bin/bash

进入后可以看到在nginx的容器中:

/etc/nginx/目录下存在nginx.conf,

/etc/nginx/conf.d/目录下存在default.conf文件

docker离线镜像nginx docker离线安装部署 linux_容器_09

退出容器,使用下面的命令,将容器中的两个文件拷贝到我们前面准备的指定挂载目录中

docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/
 docker cp nginx:/etc/nginx/conf.d/default.conf /home/nginx/conf.d/

停止和删除正在运行的nginx容器

docker stop nginx
docker rm -f nginx

docker离线镜像nginx docker离线安装部署 linux_容器_10


编辑启动脚本使用挂载目录的方式去启动nginx容器:

#!/bin/bash

docker run -d -p 80:80 --name nginx -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/conf.d:/etc/nginx/conf.d -v /home/nginx/logs:/var/log/nginx -v /home/nginx/html:/usr/share/nginx/html nginx:latest

命令解读:
run:启动一个docker容器
name:设置启动后容器的名称
d: 后台启动
p: 绑定别的端口 -p a:b 将宿主机器的a端口绑定到容器的b端口 -P 为随机绑定到端口
v : 挂载的内容 宿主机器的文件夹:容器的文件夹

在/usr/bin目录下新建docker-nginx.sh文件,将该内容全部复制到文件中。并将文件的权限修改为可执行。

docker离线镜像nginx docker离线安装部署 linux_docker离线镜像nginx_11


使用脚本启动

docker离线镜像nginx docker离线安装部署 linux_nginx_12

随便写一个html页面放到/home/nginx/html下,否则会报403;(可以将nginx自带的index文件复制到这里)

docker离线镜像nginx docker离线安装部署 linux_linux_13

启动后使用浏览器访问nginx

docker离线镜像nginx docker离线安装部署 linux_容器_14


注:后续也可将/home/nginx/conf下的nginx.conf和/home/nginx/conf.d下的default.conf合并成一个文件(将default.conf中的内容全部复制到nginx.conf 把最后一行 include /etc/nginx/conf.d/*.conf;替换掉);然后把启动脚本中的 -v /home/nginx/conf.d:/etc/nginx/conf.d删除。

在docker中离线安装redis容器

将redis镜像上传到服务器中

docker离线镜像nginx docker离线安装部署 linux_docker离线镜像nginx_15

在docker中导入镜像

docker load -i 镜像名.tar

docker离线镜像nginx docker离线安装部署 linux_容器_16

查看镜像

docker离线镜像nginx docker离线安装部署 linux_docker离线镜像nginx_17

给镜像重命名

docker tag 镜像名id  命名的镜像名:版本

latest:表示最新的,使用镜像名直接启动容器时默认使用该版本

docker离线镜像nginx docker离线安装部署 linux_nginx_18


创建redis的挂载目录和文件

mkdir -p /home/redis/data 挂载redis 的持久化文件(为了数据的持久化)

将redis自带的redis.conf配置文件放到/home/redis下 挂载redis的配置文件

docker离线镜像nginx docker离线安装部署 linux_docker离线镜像nginx_19


redis.conf文件是我手动传上去的,(redis.conf的标准文件在redis官网也可以找到)

需要将bind注释掉,否则不能在服务器外部访问redis

docker离线镜像nginx docker离线安装部署 linux_docker离线镜像nginx_20

编辑启动脚本使用挂载目录的方式去启动redis容器:

#!/bin/bash

docker run --restart=always -d -p 6379:6379 -v /home/redis/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data --name redis redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456

–restart=always 总是开机启动
-d 表示后台启动redis
-p 6379:6379 将6379端口挂载出去
–name 给这个容器取一个名字
-v 数据卷挂载
/home/redis/redis.conf:/etc/redis/redis.conf 这里是将 liunx 路径下的redis.conf 和redis下的redis.conf 挂载在一起。
/home/redis/data:/data 这个同上
redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录 /etc/redis/redis.conf 也就是liunx下的/home/redis/myredis/myredis.conf
–appendonly yes 开启redis 持久化
–requirepass 000415 设置密码 (如果你是通过docker 容器内部连接的话,就随意,可设可不设。但是如果想向外开放的话,一定要设置。)

在/usr/bin目录下新建docker-redis.sh文件,将该内容全部复制到文件中。并将文件的权限修改为可执行。

docker离线镜像nginx docker离线安装部署 linux_linux_21

使用脚本启动成功:

docker离线镜像nginx docker离线安装部署 linux_容器_22


使用可视化工具就可以访问了。

如果访问不到 检查防火墙端口问题。

查看容器运行日志:

docker logs --since 30m <容器名>

此处 --since 30m 是查看此容器30分钟之内的日志情况。

docker离线镜像nginx docker离线安装部署 linux_nginx_23

在docker中离线安装MySQL容器

将MySQL镜像上传到服务器中

docker离线镜像nginx docker离线安装部署 linux_linux_24

在docker中导入镜像

docker load -i 镜像名.tar

docker离线镜像nginx docker离线安装部署 linux_nginx_25

查看镜像

docker离线镜像nginx docker离线安装部署 linux_nginx_26


创建MySQL的挂载目录和文件

mkdir -p /home/mysql/data		挂载容器里面的mysql数据目录
touch /home/mysql/my.conf		挂载容器里面的MySQL配置文件my.cnf

编辑配置文件信息,将以下内容复制到my.conf文件中

[client]
 # socket = /usr/local/mysql_docker/mysqld.sock
 default-character-set = utf8mb4
 [mysqld]
 # pid-file        = /var/run/mysqld/mysqld.pid
 # socket          = /var/run/mysqld/mysqld.sock
 # datadir         = /var/lib/mysql
 # socket = /usr/local/mysql_docker/mysqld.sock
 # pid-file = /usr/local/mysql_docker/mysqld.pid
 datadir = /home/mysql/data
 character_set_server = utf8mb4
 collation_server = utf8mb4_bin
 secure-file-priv= NULL
 # Disabling symbolic-links is recommended to prevent assorted security risks
 symbolic-links=0
 # Custom config should go here
 !includedir /etc/mysql/conf.d/

编辑启动脚本使用挂载目录的方式去启动mysql容器:

#!/bin/bash

docker run -d -p 3306:3306 --name mysql -v /home/mysql/my.cnf:/etc/mysql/my.cnf -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123123 mysql:5.7

-e :环境参数,MYSQL_ROOT_PASSWORD设置root用户的密码

在/usr/bin目录下新建docker-mysql.sh文件,将该内容全部复制到文件中。并将文件的权限修改为可执行。

docker离线镜像nginx docker离线安装部署 linux_docker_27


使用脚本启动成功:

docker离线镜像nginx docker离线安装部署 linux_容器_28


进入容器内部,解决远程连接问题

docker exec -it mysql /bin/bash
mysql -u root -p
use mysql
alter user 'root'@'%' identified with mysql_native_password by '123123';
flush privileges;
exit;

docker离线镜像nginx docker离线安装部署 linux_docker离线镜像nginx_29

资源分享

docker离线镜像:
nginx离线镜像:
redis离线镜像:
MySQL离线镜像: