docker 容器操作应用部署mysql,redis,nginx迁移与备份Dockerfile
Posted 人生苦短,我用python
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker 容器操作应用部署mysql,redis,nginx迁移与备份Dockerfile相关的知识,希望对你有一定的参考价值。
容器操作
# 启动容器
docker start 容器id
# 停止容器
docker stop 容器id
# 文件拷贝
先创建文件 mkdir:文件夹 vi vim touch:文件
# 容器的文件copy到宿主机上(不是在容器内部操作)
docker cp 容器名称:容器目录 需要拷贝的文件或目录
docker cp 20fd8:/home/lqz.txt /home/lqz.txt
# 宿主机的文件copy到容器中
docker cp 需要拷贝的文件或目录 容器名称:容器目录
docker cp ./lqz.txt 20fd894a3f20:/home/lqz.txt
# 查看容器IP地址
docker inspect 容器名称 # 查看容器的详细描述 很多
docker inspect --format=\'.NetworkSettings.IPAddress\' 容器名称(容器ID)
# 在多个容器之间是可以ping通的
# centos:172.17.0.3
# mysql:172.17.0.2
# 删除容器(删除已停止的容器)
docker rm 容器id
docker rm `docker ps -a -q`
# 无状态的服务
myslq reids
uwsgi+django
应用部署
mysql部署
docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
# 做目录映射:data文件,配置文件
# 创建文件夹
mkdir /home/mysql
mkdir /home/mysql/conf.d
mkdir /home/mysql/data/
vim /home/mysql/my.cnf
[client]
default-character-set=utf8
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
docker run -di -v /home/mysql/data/:/var/lib/mysql -v /home/mysql/conf.d:/etc/mysql/conf.d -v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
# 创建库,创建表,插入数据
# 关闭容器,删除容器,mysql的容器没了,但是数据在宿主机上放着
# 再运行起一个容器,做好目录映射,数据都回来了
redis
# 拉取redis镜像
docker pull redis
mkdir /root/data
vim /root/redis.conf
bind 0.0.0.0
daemonize NO
protected-mode no
requirepass 123456
# 运行
docker run -id -p 6379:6379 --name redis -v /root/redis.conf:/etc/redis/redis.conf -v /root/data:/data redis redis-server /etc/redis/redis.conf
# 远程链接redis操作
redis.conf 文件 删了再重新搞 通过该文件跑在前台 一直运行
nginx
# 拉取nginx镜像
docker pull nginx
# run起容器
# docker run -id --name nginx -p 80:80 nginx
# /usr/share/nginx/html
docker run -id --name nginx -p 80:80 -v /root/html:/usr/share/nginx/html nginx
# 以后只需要修改宿主机的/root/html 路径,看到页面就是修改后的
迁移与备份
# 容器保存为镜像
运行一个centos容器
docker run -id --name centos_vim centos:7
在容器中装vim
docker exec -it 容器ID号 /bin/bash
yum install vim -y
把容器做成镜像(centos+vim)
docker commit centos_vim centos_vim_image
把centos_vim 容器删除
docker rm centos_vim
基于新构建的镜像,运行成容器
docker run -id --name centos_vim centos_vim_image:latest
进入到容器中,查看,软件都在
docker exec -it 容器ID号 /bin/bash
# 镜像备份和恢复
docker save -o centos_vim_image.tar centos_vim_image
删除容器,删除镜像
把备份的镜像恢复
docker load -i centos_vim_image.tar
Dockerfile
# 镜像从哪里来的?
1 远程仓库拉取的 docker pull
2 用容器做成的镜像 docker commit
3 把备份的恢复 docker load
4 使用Dockerfile来构建
# 什么是Dockerfile
Dockerfile是由一系列命令和参数构成的脚本文件,这些命令应用于基础镜像并最终创建一个新的镜像
# Dockerfile的命令
FROM 基础镜像 #基于哪个基础镜像来构建
MAINTAINER lqz # 声明镜像的创建者
ENV key value # 设置环境变量 (可以写多条)
RUN command #是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file #将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file # 和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_dir # 设置工作目录,运行起这个容器,来到的路径就是这个路径
# 构建一个带vim的centos镜像
vim Dockerfile
FROM centos:7
MAINTAINER lqz
ENV name lqz
RUN yum install vim -y
RUN mkdir /lqz
RUN touch /lqz/ss.py
RUN echo \'print(1)\' >/lqz/ss.py
COPY /root/redis.conf /lqz/redis.conf
WORKDIR /lqz
# 基于dockerfile构建镜像
docker build -t=\'centos_lqz_vim\' .
# 基于这个镜像运行容器
docker run -id --name xx centos_lqz_vim
# 进入到容器
docker exec -it xx /bin/bash
# 验证vim,和文件夹,文件是否存在
Dockerfile构建django启动的镜像
使用Dockerfile构建一个运行django程序的镜像
django 的helloworld --》压缩包
基于Python3.8 构建一个能够运行你这个程序的镜像
FROM python:3.8
MAINTAINER lqz
RUN pip install django==3.2.2
ADD 压缩包
WORKDIR /lqz
docker run -id -p 8080:8080 --name xx djago python manage.py runserver 0.0.0.0:8080
Docker——应用部署(MySQL部署,Nginx部署,Redis部署)
一、MySQL部署
1.拉取mysql5.7镜像
docker pull mysql:5.7
2.创建容器,启动mysql5.7 (建议别用最新版本的mysql)
docker run -id --name=mysql1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登录密码
设置好之后,可以用电脑上的mysql可视化工具远程连接宿主机的mysql,因为做了端口映射关系,操作宿主机的mysql就相当于操作容器里面的mysql。
中间出了个小插曲,我的远程服务器是阿里云的,本地工具连接3306端口之前将此端口需要先开放出来。
mysql工具创建远程连接(填写远程服务器的公网IP和密码)
连接上之后,创建一个新的数据库aaa
然后进入容器mysql也能看到刚才新建的数据库aaa,说明端口映射做成功了
下次只要操作宿主机上的mysql就能相应改变容器内的mysql数据
二、Nginx部署
1.拉取镜像
docker pull nginx
2.创建Nginx容器(做端口映射80)
docker run -id --name=mynginx -p 80:80 nginx
三、Redis部署,支持远程连接
1.拉取镜像
docker pull redis:alpine3.11
2.创建conf和data文件夹,在conf中创建redis.conf文件,内部写入(为了放置一些redis的配置文件)
bind 0.0.0.0 #绑定地址 daemonize NO protected-mode no #运行远程连接 requirepass 123456 #密码是123456
启动容器,并把宿主机上的配置文件映射到容器内
docker run -p 6379:6379 --name redis_6379 -v /home/test/redis/conf/redis.conf:/etc/redis/redis.conf -v /home/test/redis/data:/data -d redis:alpine3.11 redis-server /etc/redis/redis.conf --appendonly yes
本地使用redis可视化工具远程连接宿主机的redis(如果连接不上请去查看6379端口是否开启)
使用redis可视化工具随便添加一个键值对
设置之后能够在容器中获取到刚才设置的键name,说明连接成功了,修改宿主机的值对容器内部也有影响
以上是关于docker 容器操作应用部署mysql,redis,nginx迁移与备份Dockerfile的主要内容,如果未能解决你的问题,请参考以下文章
docker2 Docker容器操作,Docker应用部署,迁移备份