文章目录
- Linux离线安装docker
- 在docker中离线安装nginx容器
- 在docker中离线安装redis容器
- 在docker中离线安装MySQL容器
- 资源分享
Linux离线安装docker
将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容器
将nginx镜像上传到服务器中
在docker中导入镜像
docker load -i 镜像名.tar
查看镜像
给镜像重命名
docker tag 镜像名id 命名的镜像名:版本
latest:表示最新的,使用镜像名直接启动容器时默认使用该版本
在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 ps 查看正在运行的容器
docker ps -a 查询所有容器(正在运行和其他状态的)
使用浏览器访问nginx
使用如下命令进入交互式终端:
docker exec -it nginx /bin/bash
进入后可以看到在nginx的容器中:
/etc/nginx/目录下存在nginx.conf,
/etc/nginx/conf.d/目录下存在default.conf文件
退出容器,使用下面的命令,将容器中的两个文件拷贝到我们前面准备的指定挂载目录中
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
编辑启动脚本使用挂载目录的方式去启动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文件,将该内容全部复制到文件中。并将文件的权限修改为可执行。
使用脚本启动
随便写一个html页面放到/home/nginx/html下,否则会报403;(可以将nginx自带的index文件复制到这里)
启动后使用浏览器访问nginx
注:后续也可将/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中导入镜像
docker load -i 镜像名.tar
查看镜像
给镜像重命名
docker tag 镜像名id 命名的镜像名:版本
latest:表示最新的,使用镜像名直接启动容器时默认使用该版本
创建redis的挂载目录和文件
mkdir -p /home/redis/data 挂载redis 的持久化文件(为了数据的持久化)
将redis自带的redis.conf配置文件放到/home/redis下 挂载redis的配置文件
redis.conf文件是我手动传上去的,(redis.conf的标准文件在redis官网也可以找到)
需要将bind注释掉,否则不能在服务器外部访问redis
编辑启动脚本使用挂载目录的方式去启动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 logs --since 30m <容器名>
此处 --since 30m 是查看此容器30分钟之内的日志情况。
在docker中离线安装MySQL容器
将MySQL镜像上传到服务器中
在docker中导入镜像
docker load -i 镜像名.tar
查看镜像
创建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 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离线镜像:
redis离线镜像:
MySQL离线镜像: