docker----day03(容器操作,应用部署,迁移与备份,Dockerfile使用 、ubuntu系统构建redis镜像 )

上节回顾


# 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 退出
---------------------------------------------

.
.
.
.
.

今日内容

1 容器操作


# 启动容器
	docker start 容器id
# 停止容器
	docker stop 容器id

------------------------------------------

# 文件拷贝

# 宿主机的文件  copy到容器中
    docker cp 需要拷贝的文件或目录 容器名称:容器目录
    docker cp ./lqz.txt 4668e7190ff9:/home/qqq.txt  # 拷贝到容器里文件改名字了
    docker cp ./lqz.txt 4668e7190ff9:/home   # 拷贝到容器里,文件名字不变
    # 就将宿主机上当前目录下的lqz.txt文件 拷贝到对应容器里面去


# 容器的文件 copy到宿主机上(不是在容器内执行,还是在宿主机上执行!!!)
    docker cp 容器名称或id :容器目录  需要拷贝的文件或目录
    docker cp  4668e7190ff9:/home/qqq.txt /home/qqq111.txt

------------------------------------------
------------------------------------------

# 查看容器IP地址
	docker inspect 容器名称    # 查看容器的详细描述
	docker inspect 4668e7190ff9

	docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称/容器ID
	docker inspect --format='{{.NetworkSettings.IPAddress}}' 4668e7190ff9

    # 查看对应容器的ip地址

    # 多个容器间是网络隔离的
    # 但是 在多个容器之间是可以ping通的

    # youcentos: 172.17.0.3
    # mysql888:172.17.0.2

    # 先查出容器的ip地址,先进入到 mysql888 容器内部,ping一下youcentos的ip地址
    # docker exec -it 62006c4a6a4c /bin/bash
    # ping 172.17.0.3   能ping通的
    # 如果显示没有ping命令,可能mysql容器里面安装的不是不是centos系统而是乌班图
    # apt-get update
    # apt-get install net-tools -y

------------------------------------------
------------------------------------------

# 删除容器(删除已停止的容器)
	docker rm 容器id  # 删除对应id的已停止的容器
	docker rm `docker ps -a -q`   # 删除所有已停止的容器
	docker rm 容器id -f # 删除对应id的容器,不管该容器是否停止,谨慎使用!!

------------------------------------------
------------------------------------------

# 无状态的服务
	myslq reids
	uwsgi+django

------------------------------------------

.
.
.
.
.
.

2 应用部署

2.1 mysql 部署

----------------------------------------
# 这是直接运行mysql容器,没做目录映射!!!
docker run -id --name=mysql666 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

----------------------------------------
----------------------------------------

# 做目录映射:data文件,配置文件

# 1 先创建文件夹
mkdir /home/mysql
mkdir /home/mysql/conf.d
mkdir /home/mysql/data/

# 2 创建并打开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


# 3 把宿主机里面的目录映射到容器里面去,映射了3个,
# 一个data目录,一个配置文件目录,一个配置文件
docker run  -id -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=mysql666 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

# 这样搞后,mysql库的文件实际上不在容器里面,都在宿主机上了,容器删了,数据也不会丢
# 操作容器里面数据库的表产生的数据,也都在宿主机里面
# cd /home/mysql/ data/    能看到所创的库

--------------------------------------------------------

# 创建库,创建表,插入数据

# 关闭容器,删除容器,myslq的容器没了,但是数据在宿主机上放着
docker stop 647f85ddf360
docker rm 647f85ddf360


# 再运行起一个容器,做好目录映射,数据都回来了
把上面运行容器的一串代码再运行下,数据就回来了,配置一定要一样

--------------------------------------------------------

.
.
.
.
.
.

2.2 redis 部署

# 如果想要长久的用redis mysql 这些会产生数据的软件,最好在宿主机做目录映射到容器里
# 这样容器没了,产生的数据也还在宿主机里面!!!

# 1 拉取redis镜像
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=redis888 -v /root/redis.conf:/etc/redis/redis.conf -v /root/data:/data redis:latest  redis-server /etc/redis/redis.conf

# redis-server /etc/redis/redis.conf  这行代码作为启动容器后的第一条命令
# 容器做成了这个命令的守护进程了
# 这条命令一结束,容器就关掉了,所以要让容器不关掉,就要让这条命令阻塞住,不结束才行
# 不写这行命令,当容器启动起来后,会执行一个默认的命令,阻塞住,不让容器关掉
# 但是写了命令,就会把默认的命令覆盖掉了!!!


# 进入redis容器里面  连接redis
docker exec -it 25dc3e2c7e39 /bin/bash
redsi-cli  # 启动服务端
keys *  # 查看redis里面所有键值对
auth 123456  # 登录一下
set name lqz  # 存字符串
get name  # 取字符串

---------------------------------------

# 再到resp远程链接redis 可以看到我们在容器里面的redis服务端里面设置的值!!!

.
.
.
.
.

2.3 nginx 部署


# 拉取nginx镜像
docker pull nginx:latest

# run起容器  在浏览器里面输入http://10.0.0.200:8080/  映射到容器80端口
# nginx容器80端口的请求后,自动展示html目录下面的index.html欢迎页面!!!
docker run -id --name=nginx -p 8080:80 nginx:latest


----------------------------------------------------------

# 进入docker容器
docker exec -it 3d8f0486961e /bin/bash
cd /usr/share/nginx/html/   # ls 可以看到两个html文件
直接打开html目录下的index.html文件,发现vim没有,要下vim出了点问题,没成功
# apt-get update    # apt-get install vim  这两个命令有点问题下载vim有问题

----------------------------------------------
# 所以下面又用目录映射来该index.html文件的

# 来到宿主机上
mkdir html
cd html/
vim index.html      # 把html代码粘贴进去 :wq 退出

# 再把改改起的nginx容器停掉,删掉后

# 启动nginx容器,做个目录映射  把原来nginx里面html目录用宿主机上的html目录顶掉
docker run -id --name=nginx -p 8080:80 -v /root/html:/usr/share/nginx/html nginx:latest

#  只需要修改宿主机的/root/html目录里面的index.html里面的代码 ,
#  访问nginx监听的端口 http://10.0.0.200:8080/  看到页面就是修改后的页面了

.
.
.
.
.
.
.
.

补充知识

-------------------------------------------

# 假如你写了一个开源软件,别人想要运行起你的项目,肯定要先装个mysql与redis,
# 再把你的项目运行起来,这样就比较麻烦

# 第一种办法:
可以把你的项目软件 与 mysql与redis 一起做到一个镜像里面去,
别人拿着你的镜像文件,运行成容器,就可以直接把你的项目跑起来了
该方法太笨重了,不建议在docker容器里面,运行多个服务

# 第二种办法:
把项目文件,mysql与redis文件 都做成容器,做成一个单机的容器编排
别人 只要安装了docker-compose  执行命令docker-compose up -d
就会直接把你的项目文件,mysql与redis文件全部运行起来!!!就比较方便!!!

-------------------------------------------
-------------------------------------------

.
.
.

3 迁移与备份


# 容器保存为镜像!!!

-运行一个centos容器
    docker run -id --name=centos_vim centos:7

-在容器中装vim
    docker exec -it 00bcf763b395 /bin/bash
    yum install vim -y   # 容器中装vim软件
    mkdir teng  # 先随便创个文件夹 cd进去   随便创建并打开一个文件
    cd teng
    vim aaa.py
    exit  # 退出容器

-把容器做成镜像(centos+vim)
    docker commit 容器名 镜像名
    docker commit centos_vim centos_vim_image

--------------

-把centos_vim 容器删除
    docker rm centos_vim -f

-基于新构建的镜像centos_vim_image,运行成容器
    docker run -id --name=centos_vim555 centos_vim_image:latest

-进入到容器中,查看,软件都在
    docker exec -it 容器id号 /bin/bash

---------------------------------------------------

# 镜像备份和恢复

# 把镜像文件打包成压缩包,这样就可以把压缩包复制给别人了,不常用
    # cd的家目录下执行该命令
    docker save -o centos_vim_image.tar centos_vim_image

# 正常情况下是把 镜像文件 上传到远程仓库(注册中心),让别人从你远程仓库拉


# 删除容器,删除镜像
    docker rm b78a105a28be -f  # 删除容器
    docker images
    docker rmi a630cc4e39eb   # 删除镜像


# 把备份的镜像压缩包 恢复成镜像  压缩包还在
    docker load -i centos_vim_image.tar
    docker images  # 再查看镜像,发现镜像又有了

.
.
.
.
.
.

4 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 	# 设置工作目录,创建目录并cd到目录下,mkdir lqz  cd lqz
    # 运行起这个容器,来到的路径就是这个路径

-------------------------------------------------
-------------------------------------------------

# 构建一个带vim的centos镜像

# 第一步:
vim Dockerfile     # 在家目录下  创建并打开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
ADD /goudan /hahaha    # 找宿主机要复制的目录  是基于dockerfile所在的目录找的
WORKDIR /lqz

# 装一个vim,根目录下创个lqz目录,在里面创个ss.py文件,写了print(1)内容
# 将家目录下goudan目录复制到容器的根目录下的hahaha目录下
# 并来到容器的/lqz目录下

---------------------------------------------
# 第二步:

# 基于dockerfile构建镜像
# 镜像名字自己指定  后面的小点  表示当前路径下的 dockerfile
docker build -t='centos_teng_vim' .

---------------------------------------------
# 第三步:
# 基于这个镜像运行容器
docker run -id --name=xxxx centos_teng_vim

# 进入到容器  就会直接到了 /lqz 目录下  因为设置了 WORKDIR /lqz
docker exec -it xxxx /bin/bash

echo $name     # 就能取出环境变量里面的lqz


# 验证vim,和文件夹,文件是否存在
cd /
cd lqz
ls
vim ss.py    # 都能正常 执行!!!

------------------------------------

# echo命令就行往文件里面写,然后自动保存

.
.
.

如何构建一个 基于ubuntu系统的redis镜像


# centos   yum install nginx
# ubuntu   apt-get install nginx
    yum update
    apt-get update
    apt-get install vim -y

----------------------------------
# 需求解决:

# redis,mysql 都是官方镜像
# 公司里:基于ubuntu---》安装redis
    让做一个基于ubuntu20.04版操作系统的redis镜像
    用Dockerfile去构建,直接构建有可能不成功
    可以先把ubuntu20.04镜像拉下来---运行成容器---进到容器---安装redis 安装成功了
    把命令记下来---》再写到 Dockerfile 里面去

.
.
.

基于ubuntu镜像构建redis镜像


# 第一步:编辑Dockerfile
vi Dockerfile
# 写入
FROM ubuntu:lunar-20230415
MAINTAINER lqz
WORKDIR /soft
RUN apt-get update && apt-get install wget make build-essential -y
RUN wget https://github.com/redis/redis/archive/7.0.11.tar.gz && tar -xzvf 7.0.11.tar.gz
WORKDIR /soft/redis-7.0.11
RUN make && make install
EXPOSE 6379
CMD ["redis-server","./redis.conf"]

---------------------------------------

# 执行命令构建镜像
docker build -t='ubuntu_redis' .


# 查看构建完成的镜像
docker images

# 镜像运行成容器
docker run -id --name redis -p 6379:6379 ubuntu_redis

# 第五步:查看正在运行的容器
docker ps

# 进入到容器
docker exec -it redis /bin/bash
redis-cli  # 连接

.
.
.

posted @   tengyifan  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示