Docker安装 使用 镜像操作 容器操作 迁移与备份 私服搭建
Docker是一个客户端-服务器(C/S)架构程序
重点:
-镜像:镜像当作容器的“源代码”,类比面向对象中的:类
-容器:就是一个一个的操作系统:对象
# 更新yum源 >>: sudo yum update # yum换源--阿里源 >>: sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装dcoker >>: yum install docker-ce -y
# 查看版本信息 docker -v # 启动docker systemctl start docker # 停止docker systemctl stop docker # 重启docker systemctl restart docker # 查看docker状态信息 systemctl status docker # 查看docker概要信息 docker info # 打印人容器的日志信息 docker logs ElasticSearch # 打印近30分钟的日志信息 docker logs --since 30m ElasticSearch # 从某个时间点开始打印100行日志 docker logs -f -t --since="2023-06-20" --tail=100 ElasticSearch # 设置开机启动 systemctl enable docker # 将指定用户添加到用户组 usermod -aG docker root
# 修改配置文件
vim /etc/docker/daemon.json
# 配置项增加如下配置
{ "registry-mirrors" : [ "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn", "https://cr.console.aliyun.com/" ] }
# 搜索镜像 # 也可在https://hub.docker.com/地址里搜索 >>: docker search python # 下载镜像 >>: docker pull [镜像名称] >>: docker pull centos:centos7.7.1908 >>: docker pull centos #下载最新版本 # 查看下载的镜像 >>: docker imgs # 删除镜像 >>: docker rmi [镜像id号]
将容器打包为镜像并导出文件:
# 使用docker export 命令将容器打包为镜像并导出到文件
docker export [容器id] > image.tar
# 上面命令执行之后,我们便可以通过ls命令查看在当前目录下的 image.tar
# 导入镜像
# 使用docker import命令将这个镜像导进来
docker import [容器名] < image.tar
# 通过docker images 命令查看镜像是否导入
docker images
将镜像打包并导出文件:
# 通过docker image查看本机上的所有镜像
docker images
# 找到要上传的镜像的id,使用docker save命令将镜像保打包导出为一个文件
docker save [镜像id] > image.tar
# docker save 可以将多个image打包成一个文件
docker save -o image.tar [镜像1] [镜像2]
# 通过docker load载入镜像
docker load < image.tar
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
# 查看正在运行的容器 docker ps # 查看所有容器 docker ps -a # 启动容器(基于image启动) docker run [参数1][参数2][...][参数n] # 目录挂载 docker run -di -v /home/test:/home/test --name=mycentos3 centos:centos7.7.1908 # 启动centos7 docker run -id --name mycentos7 centos:centos7.7.1908 # 停止容器 docker stop [容器id/名字] # 启动已经有的容器 docker start [容器id/名字] # 进入到容器内部 docker exec -it [容器名称/容器ID] /bin/bash docker exec -it [容器名称/容器ID] sh # 退出当前容器 exit # 文件拷贝 #向里拷贝(从宿主机---》容器) docker cp [需要被拷贝的文件或目录] [容器名称:容器目录] docker cp /home/elasticsearch.yml ElasticSearch:/usr/share/elasticsearch/config/elasticsearch.yml # 向外拷贝(从容器---》宿主机) docker cp [容器名称:容器目录] [需要拷贝到的文件或目录] docker cp ElasticSearch:/usr/share/elasticsearch/config/elasticsearch.yml /home/elasticsearch.yml # 查看容器ip地址 >>: docker inspect [容器名称/id] >>: docker inspect --format='{{.NetworkSettings.IPAddress}}' [容器名称/id] # 删除容器 >>: docker rm [容器名称/id]
# 查看当前容器在宿主机上的目录信息 docker inspect ElasticSearch # 进入该目录 cd /var/lib/docker/containers/e7b4a8d57b3b982450906bc237c943a0d148ec230f2176d6438d31ce11d3f31e/ # 修改hostconfig.json文件增加Binds配置项 "Binds":["/usr/local/docker/volumes/ik:/usr/share/elasticsearch/plugins/ik"] # 修改config.v2.json增加MountPoints配置项 "MountPoints":{"/usr/share/elasticsearch/plugins/ik":{"Source":"/usr/local/docker/volumes/ik","Destination":"/usr/share/elasticsearch/plugins/ik","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/usr/local/docker/volumes/ik","Target":"/usr/share/elasticsearch/plugins/ik"},"SkipMountpointCreation":false}}
>>: docker pull redis # 创建conf和data文件夹 >>: cd /home >>: mkdir conf data # 在conf文件夹中创建redis.conf文件并写入以下内容 bind 0.0.0.0 #绑定地址 daemonize NO protected-mode no #允许远程连接 requirepass 123456 #密码是123456 # 运行容器 docker run -p 6379:6379 --name redis_6379 -v /home/test/redis/conf/redis.conf:/etc/redis/redis.conf -v /home/test/redis/data:/data -d redis:alpine3.11 redis-server /etc/redis/redis.conf --appendonly yes
# 本质就是把容器打包成镜像 >>: docker commit mynginx mynginx_i # 保存并压缩 可以传到别的机器 >>: docker save -o mynginx.tar mynginx_i # 别的机器load回来 就能恢复到image run起来直接运行容器 >>: docker load -i mynginx.tar
Dockerfile:
# Dockerfile # Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像(本质:Dockerfile能生成镜像) # 文件名字必须是Dockerfile # Dockerfile文件内容: """ FROM image_name:tag # 定义了使用哪个基础镜像启动构建流程 MAINTAINER user_name # 声明镜像的创建者 ENV key value # 设置环境变量 (可以写多条) # RUN command 是Dockerfile的核心部分(可以写多条),linux命令 RUN wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz RUN tar -xzf Python-3.6.10.tgz ADD source_dir/file dest_dir/file # 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 COPY source_dir/file dest_dir/file # 和ADD相似,但是如果有压缩文件并不能解压 WORKDIR path_dir # 设置工作目录 """ # 案例:在python下安装django 1.11.9和requests模块 FROM python:3.6 MAINTAINER lqz RUN pip3 install django==1.11.9 RUN pip3 install requests WORKDIR /home # Dockerfile构建镜像 docker build -t=[标签] [Dockerfile目录] >>: docker build -t='django1.11.9' . # 查看是否构建完成 >>: docker images
# 1、修改docker配置文件
vim /lib/systemd/system/docker.service
在ExecStart=后面加上:
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
修改后的配置如下:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
# 2、刷新配置重启服务
systemctl daemon-reload
systemctl restart docker
私服搭建:
# 搭建步骤:
# 1.拉取私有仓库镜像(若私服已经存在,此步省略)
>>: docker pull registry
>>: docker run -di --restart=always --name=registry -p 5000:5000 registry
# 2.打开浏览器输入地址 http://121.43.122.94:5000/v2/_catalog 看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空
# 3.修改daemon.json,配置docker的私有仓库为该容器地址
>>: vi /etc/docker/daemon.json
# 4.添加以下内容,保存退出
{"insecure-registries":["121.43.122.94:5000"]}
# 5.重启docker 服务
>>:systemctl restart docker
# 6.镜像上传至私有仓库
# 7.给本地镜像增加标签,用于上传到私有仓库
>>: docker tag django2.0 121.43.122.94:5000/django2.0
# 8.再次启动私服容器
>>: docker start registry
# 9.上传标记的镜像
>>: docker push 121.43.122.94:5000/django2.0