docker容器操作,应用部署,迁移与备份,Dockerfile
容器操作
启动容器
docker start 容器id
docker start 容器名称
停止容器
docker stop 容器id
docker stop 容器名称
文件拷贝
容器的文件cpoy到宿主机上(不是在容器内执行,在宿主机上执行)
docker cp 容器名称:容器目录 cpoy到宿主机上的文件或目录
docker cp 20fd8:/home/lqz.txt /home/lqz.txt
宿主机上的文件cpoy到容器中
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` # 全部删除
docker rm 容器id -f(不要随便使用,这个是强制删除,不管是否在运行中)
无状态的服务(不在容器中产生重要数据)
uwsgi+django
有状态的服务
mysql redis
应用部署
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
# 创建库,创建表,插入数据
# 关闭容器,删除容器,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容器
ocker run -id --name centos_vim centos:7.9.2009
在容器中装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 save -o centos_vim_image.tar centos_vim_image
删除容器,删除镜像
docker rmi 镜像名称:标签
把备份的镜像恢复
docker load -i centos_vim_image.tar
Dokcerfile
镜像从哪里来
远程仓库拉取的 docker pull 镜像名:镜像标签
用容器做成的镜像 docker commit 被制作的容器名 制作后的镜像名
保存镜像 docker save -o 保存的镜像名字.tar 要保存哪个镜像的名字
把备份的恢复 docker load -i 要加载的本地镜像文件名字.tar
使用Dockerfile来构建
什么是Dockerfile
Dockerfile是由一系列命令和参数构成的脚本文件,这些命令应用于基础镜像并最终创建一个新的镜像
Dockerfile的命令
FROM 基础镜像 基于哪个基础镜像来构建
MAINTAINER lqz 生命镜像的创建者
ENV key value 设置环境变量(可以多写条)
ENV key1 value1
RUN command(ls) 是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file 和ADD相似,但是如果有压缩文件并不能解压
WORKDIR lqz 设置工作目录,运行起这个容器,来到的路径就是这个路径
构建一个带vim的centos镜像
vim Dockerfile 必须叫这个名字
FROM centos:7.9.2009
MAINTAINER LQZ
RUN yum install -y
RUN mkdir /lqz
ADD /root/bb.txt /lqz/bb.txt
WORKDIR /lqz
基于Dockerfile构建镜像
docker build -t=‘centos_lqz_vim’ .
基于这个镜像运行容器
docker run -id --name xx centos_lqz_vim
进入到容器
docker exec -it xx /bin/bash
基于Python3.8 构建一个能够运行你这个程序的镜像
FROM python:3.8
MAINTAINER fhq
RUN pip install django==3.2.2
RUN mkdir /home/api
ADD api.tar /home/api/
WORKDIR /home/api/
CMD python manage.py runserver 0.0.0.0:8000