docker_day03:容器操作 引用部署 迁移与备份 Dockerfile

发布时间 2023-04-13 20:09:15作者: 小福福

回顾

# 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

image-20230413151945331

查看容器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`
    
    
# 无状态的服务(不保存重要的数据)
   uwsgi+django
# 有状态的服务:
   mysql+redis

查看容器IP地址

image-20230413153546460

相当于Django的dtl,go语言的模板语法,点开头。

image-20230413153756215

应用部署

mysql 部署

注意在run mysql的是记得要-e指定参数!只有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

宿主机的目录:容器中的目录  --name后面的名称也可以用空格或者是等号 -e是指定参数
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的容器没了,但是数据在宿主机上放着

# 再运行起一个容器,做好目录映射,数据都回来了

在容器的/var/lib/mysql下看到,在容器中新创的库

image-20230413160837502

在宿主机里中/home/mysql目录下写的my.cnf文件配置映射到容器中的/etc/mysql目录下的my.cnf中

image-20230413161242220

image-20230413161839541

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-cli连接redis,用auth 123456登入,远程连接RESP可视化软件

image-20230413170747797

nginx

# 拉取nginx镜像
docker pull nginx

# run起容器
docker run -id --name nginx -p 80:80 nginx
    
# /usr/share/nginx/html  nginx中的路径
docker run -id --name nginx -p 80:80 -v /root/html:/usr/share/nginx/html nginx
# 以后只需要修改宿主机的/root/html 路径,看到页面就是修改后的

进入到nginx

image-20230413172816848

浏览直接访问宿主机的端口映射到Nginx容器,以后只需要修改宿主机的/root/html 路径,看到页面就是修改后的

image-20230413172834259

迁移与备份

# 容器保存为镜像
运行一个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

将容器保存为镜像

image-20230413174344819

image-20230413181934248

删除容器,删除镜像

image-20230413184427261

删除容器,删除镜像

image-20230413184558193

备份的镜像恢复

image-20230413185020856

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 lqz 	# 设置工作目录,运行起这个容器,来到的路径就是这个路径
    
    
    
# 构建一个带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' . 
自定义置镜像名,点是当前路径下的dockerfile

# 基于这个镜像运行容器
 docker run -id --name xx centos_lqz_vim
# 进入到容器
docker exec -it xx /bin/bash
# 验证vim,和文件夹,文件是否存在

image-20230413193453788

验证vim,和文件夹,文件是否存在

image-20230413193859344

image-20230413194312612