docker:应用部署、迁移与备份、Dockerfile
一、应用部署
补充知识点:
容器之间互相是可以ping通的
但是当我们在mysql创建的容器中想要执行命令的时候,我们会发现他内部没有(基本都没得),这时候我们要用命令去安装他那些操作命令
他的一些基础功能安装命令:
apt-get update apt-get install net-tools
安装成功后就可以使用ping命令了
原因:老刘说因为mysql为了减小镜像的大小,使用的是ubuntu或debian系列的操作系统,因此使用的命令也不一样
1.1 mysql 部署
(1)拉取mysql镜像
docker pull centos/mysql-57-centos7
(2)创建容器
docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登陆密码
(3)远程登录mysql
连接宿主机的IP ,指定端口为33306
拓展:使用映射部署
参考博客:MySQL主从搭建(基于docker)
上面是直接创建容器的命令,但是在实际的使用过程中,为了保证数据,我们会使用目录映射,把数据库、配置文件在本地也映射一份
步骤一
在home目录下创建mysql文件夹,下面创建data和conf.d文件夹
mkdir /home/mysql mkdir /home/mysql/conf.d mkdir /home/mysql/data/
步骤二
在/home/mysql创建my.cnf配置文件,并写入配置信息
touch /home/mysql/my.cnf 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
ps:我们可以发现他跟windows上的mysql的配置文件(my.ini)内容相似
步骤三
创建容器
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
/var/lib/mysql是数据库文件夹
/etc/mysql/conf.d是配置文件目录
/etc/mysql/my.cnf是配置文件
步骤四
接下去就是使用mysql:创建库,创建表,插入数据
如果这时候我们关闭容器,删除容器,myslq的容器没了,但是数据在宿主机上放着
然后我们再运行起一个容器,做好目录映射,数据都回来了(在这个容器中也能一样用)
1.2 nginx
(1)拉取nginx镜像
docker pull nginx
(2)创建Nginx容器
我们在部署nginx的时候,可对网页的静态资源做一个映射,这样我们就可以在宿主机修改网页的相关文件(容器内没有vi等编辑命令,不好操作)
接着还可以对端口也做映射,让我们在访问宿主机的时候,就返回nginx的页面
docker run -id --name nginx -p 80:80 -v /root/html:/usr/share/nginx/html nginx
容器中的静态文件目录:
/usr/share/nginx/html
1.3 redis
(1)拉取镜像
docker pull redis
(2)创建映射的目录以及配置文件
mkdir /root/data vim /root/redis.conf '配置文件内容如下:' bind 0.0.0.0 daemonize NO protected-mode no requirepass 123456 这里的配置文件最好再配置一个持久化文件存储路径
(3)创建并运行容器
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-server则是说,容器已启动就执行redis-server命令并且以/etc/redis/redis.conf 作为配置文件启动
接着我们就可以远程链接redis操作了
1.4 部署项目的一些讲解
我们使用docker部署项目会非常的快,因为一些依赖类型的东西就不需要安装了,然后也不需要编译了
安装的时候不推荐在一个容器中安装多个服务,而应该在多个容器中运行多个服务
这里我们可以参考学长的django-vue-admin项目:https://gitee.com/liqianglog/django-vue-admin
在他的说明中就有提到如何使用docker安装,
当我们安装好了所有的服务和项目,我们还可以把他们做成镜像,这样下次部署的时候,就可以直接用这个镜像操作了,而这样的镜像我们叫他docker-compose(使用Dockerfile模板文件创建)
二、迁移与备份
1 容器保存为镜像
我们可以通过以下命令将容器保存为镜像
docker commit mynginx mynginx_i mynginx:容器名称 mynginx_i:保存的镜像名称
举例:
# 容器保存为镜像 -运行一个centos容器 docker run -id --name centos_vim centos:7 -在容器中装vim docker exec -it a6e240 /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
2 镜像备份
我们可以通过以下命令将镜像保存为tar 文件
docker save -o mynginx.tar mynginx_i 例: docker save -o centos_vim_image.tar centos_vim_image
3 镜像恢复与迁移
首先我们先删除掉mynginx_img镜像 然后执行此命令进行恢复
docker load -i mynginx.tar 例: docker load -i centos_vim_image.tar
-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复
三、Dockerfile
参考文档:https://www.cnblogs.com/liuqingzheng/articles/17317347.html
镜像从哪里来的?
1、远程仓库拉取的 docker pull
2、用容器做成的镜像 docker commit
3、把备份的恢复 docker load
4、使用Dockerfile来构建
什么是Dockerfile?
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
优点:
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植。
常用命令
命令 | 作用 |
---|---|
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条) |
RUN command | 是Dockerfile的核心部分(可以写多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录,运行起这个容器,来到的路径就是这个路径 |
使用脚本创建镜像
步骤:
(1)创建目录
mkdir –p /usr/local/dockerdjango
(2)下载jdk-8u171-linux-x64.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录
(3)创建文件Dockerfile 用vim编辑 Dockerfile
vim Dockerfile #依赖镜像名称和ID FROM centos:7 #指定镜像创建者信息 MAINTAINER TEST #切换工作目录 WORKDIR /usr #设置环境变量(添加了一个键值对name:zzh) ENV name wxl #安装vim RUN yum install vim -y #创建文件夹wxl RUN mkdir /wxl #创建文件ss.py RUN touch /wxl/ss.py #往文件中写入内容 RUN echo 'print(1)' >/wxl/ss.py #拷贝文件 COPY /root/redis.conf /wxl/redis.conf #设置/wxl为工作目录,已进入容器就会进入这个目录 WORKDIR /wxl
(4)执行命令构建镜像
docker build -t='django2.0' .
注意后边的空格和点,不要省略,他代表使用当前目录下的Dockerfile 文件执行命令
(5)查看镜像是否建立完成
docker images
(6)基于这个镜像运行容器
docker run -id --name 容器名称 镜像名称 # 进入到容器 docker exec -it xx /bin/bash # 验证vim,和文件夹,文件是否存在
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现