容器操作,应用部署,迁移与备份,Dockerfile
Posted zx0524
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器操作,应用部署,迁移与备份,Dockerfile相关的知识,希望对你有一定的参考价值。
容器操作,应用部署,迁移与备份,Dockerfile
上节回顾
# 1 docker 启动,停止,查看状态命令
systemctl start docker
systemctl stop docker
systemctl status docker
docker info # 查看详情
systemctl enable docker # 开机自启动
# 2 配置镜像源,拉取镜像时,速度快
vim /etc/docker/daemon.json
# 阿里云的:每个账户会分配
# 3 镜像操作
-搜索镜像:在网站上搜索
-拉取镜像 docker pull 镜像名字:标签
-查看本地镜像 docker images 或者 docker image ls
-删除镜像 docker rmi 镜像id号
-一次性删除所有镜像 docker rim `docker images -p`
# 4 容器操作
-查看正在运行的容器 docker ps
-查看所有容器 docker ps -a
-创建并运行容器
docker run -id/it --name=名字 -p 8080:8080 -p 80:80 -v /home/lqz:/lqz 镜像名字:标签
-在容器上执行命令
docker exec 容器id 命令
docker exec -it 容器id /bin/bash # exit 退出
容器操作
# 启动容器
docker start 容器id
# 停止容器
docker stop 容器id
# 文件拷贝
# 容器的文件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+djan
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
#在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\'\'\'
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登陆密码
# 创建并运行容器
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
(3)远程登录mysql
连接宿主机的IP ,指定端口为33306
# 创建库,创建表,插入数据
# 关闭容器,删除容器,myslq的容器没了,但是数据在宿主机上放着
# 再运行起一个容器,做好目录映射,数据都回来了
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操作
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 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
# 镜像备份和恢复
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是由一系列命令和参数构成的脚本文件,这些命令应用于基础镜像并最终创建一个新的镜像
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植。
常用命令
命令 | 作用 |
---|---|
from(基础镜像) | 用来说明基于哪个基础镜像来构建 |
MAINTAINER NAME | 声明镜像的创建者 |
ENV KEY value | 设置环境变量 |
RUN command | 是Dockerfile核心部分,容器内执行命令,用于安装软件、配置环境等操作 |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR XXX | 设置工作目录,运行起这个容器,来到的路径就是这个路径 |
# 构建一个带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,和文件夹,文件是否存在
利用 Docker 备份迁移数据库
原文地址:https://zeeko.1503.run/Article/17
最近在把腾讯云的国内主机迁移到香港主机,因为之前使用的 MySql 跟 MongoDb 都是基于 Docker 部署的,所以迁移起来还算比较方便,主要思路就是把数据库容器的数据卷单独做成一个数据镜像,然后把这个镜像提交到香港主机上面的私有仓库,最后用这个镜像生成一个数据容器挂载到应用容器上就好了。
1. 备份数据卷
docker run --rm --volumes-from data-container-backup --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /folderToBackup
#Example: Backup mysql database
docker run --rm --volumes-from blog-mysql --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /var/lib/mysql
--rm
用来创建一个“用完即销”的容器,--volumes-from
用来把一个已有容器上挂载的卷挂载到新创建的容器上
2. 创建数据容器
docker run -d -v $(pwd):/backup --name data-backup alpine /bin/sh -c "cd / && tar xvf /backup/backup.tar"
3. 推送数据容器到私有仓库
docker commit data-backup registry-host:port/data-backup:$VERSION
docker push registry-host:port/data-backup:$VERSION
4. 在另一台主机下载数据容器
docker run -v /folderToBackup --entrypoint "bin/sh" --name data-container registry-host:port/data-backup:${VERSION}
5. 将数据容器里面的数据卷挂载到应用容器上
docker run --volumes-from=data-container registry-host:port/data-backup:${VERSION}
# Example
docker run --name new-mysql -d -p 3306:3306 --volumes-from=data-container registry-host:port/data-backup:${VERSION}
就这样 5 步操作,就可以很方便的备份、迁移数据库了。所以买主机也一定要买支持 Docker 的 KVM 虚拟机啊。
以上是关于容器操作,应用部署,迁移与备份,Dockerfile的主要内容,如果未能解决你的问题,请参考以下文章
docker 容器操作应用部署mysql,redis,nginx迁移与备份Dockerfile
docker2 Docker容器操作,Docker应用部署,迁移备份