docker

docker简述

  • docker为什么会出现?
    一款产品从开发到上线两套环境,环境配置是十分的麻烦,每一个机器都要部署环境费事费力,docker为我们打包项目并帯上环境,以镜像的形式存在Docker仓库中,从仓库下载镜像直接运行即可
  • docker能做什么?
    容器内的应用直接运行在宿主机的内核中,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了。
    每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响。
  • docker运行原理
    当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。然而避免引导、加载操作系统内核是个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载GuestOS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个复杂的过程,因此新建一个docker容器只需要几秒钟

docker的基本组成

1.Docker的三要素?

  • 镜像(image):就是一个只读的模板,镜像可以用来创建容器,一个镜像可以创建很多容器。镜像文件类似于java的类模板,而容器实例类类似于java中new出来的实例对象。
  • 容器(container):docker利用容器独立运行的一个或一组应用,应用程序或服务运行在容器里面,可以把这个容器看做一个简易的 Linux系统。
  • 仓库(repository):是集中存放镜像文件的场所,仓库分为公有仓库和私有仓库(很类似git);我们可以把镜像发布到仓库中,也可以从仓库中拉镜像。
  • 总结:docker本身是一个容器运行载体,我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件,通过这个镜像群文件可以生成docker容器实例。

2.Docker工作原理

client:客户端
docker host:docker主机
docker daemon:docker守护进程
docker registry:docker远程仓库

docker是一个client-server结构的系统,docker守护进程运行在docker主机上,然后客户端通过socket连接访问,守护进程从客户端接受命令并管理运行在主机上的容器。docker主机上如果没有镜像就会从远程仓库,通过镜像获取容器,是一个运行时环境,就是我们前面说到的集装箱。
在这里插入图片描述

3.docker平台架构

docker 运行的基本流程为:

  1. 用户是使用docker client与docker daemon建立通信,并发送请求给后者。
  2. docker daemon作为docker架构中的主体部分,首先提供docker sever的模块使其可以接受docker client的请求。
  3. docker engine执行docker内部的一系列工作,每一项工作都是以一个job的形式的存在。
  4. job的运行过程中,当需要容器镜像时,则从docker registry中下载境像,并通过镜像管理驱动graph driver将下载镜像以graph的形式存储
  5. 当需要为docker创建网络环境时,通过网络管理驱动network driver创建并配置docker容器网络环境。
  6. 当需要限制docker容器运行资源或执行用户指令等操作时,则通过exec driver来完成。
  7. libcontainer是一项独立的容器管理包,network driver以及exec driver来都是通过它来实现具体对容器进行的操作。
    在这里插入图片描述

Docker安装

1.安装

# 确认当前环境是否支持docker
sudo uname -r						# 查看liunx内核版本  内核版本必须在3.8以上
sudo cat /etc/redhat-release		# 查看liunx系统信息 docker必须运行在centos 7以上

# 卸载旧版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 安装gcc相关依赖
sudo yum -y install gcc

# 安装需要的安装包 
sudo yum install -y yum-utils

# 设置stable镜像仓库	官网提供的是国外地址在下载时会连接超时或失败,这里替换成阿里云的。
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 更新yum软件包索引 若报错去除fast参数
sudo yum makecache fast

# 安装docker相关的 docker-ce 社区版 而ee是企业版 
sudo yum -y install docker-ce docker-ce-cli containerd.io

# 启动docker
sudo systemctl start docker
# 设置docker开机启动
sudo systemctl enable docker

# 测试docker 1. 查看docker版本  2.运行hello world
sudo docker version
sudo docker run hello-world

2.配置阿里云镜像加速

登录阿里云搜索容器镜像服务-》进入管理控制台-》点击镜像加速器。
在这里插入图片描述

#8.配置阿里云镜像将上面的获取的信息复制直接运行
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://kmuowg84.mirror.aliyuncs.com"]
}
EOF
#9.重启daemon和docker
sudo systemctl daemon-reload
sudo systemctl restart docker

3.卸载

# 停止docker服务
sudo systemctl stop docker 
# 卸载 Docker Engine、CLI 和 Containerd 包:
sudo yum remove docker-ce docker-ce-cli containerd.io
#卸载镜像和容器
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

4.docker run hello-world干了什么

在这里插入图片描述

Docker的常用命令

1.帮助启动类命令

systemctl start docker 		#启动docker 
systemctl stop docker		#停止docker 
systemctl restart docker	#重启docker: 
systemctl status docker		#查看docker状态: 
systemctl enable docker		#开机启动: 
docker info				#查看docker概要信息: 
docker --help			#查看docker总体帮助文档:
docker 具体命令 --help	#查看docker命令帮助文档:
#帮助文档的地址:https://docs.docker.com/engine/reference/commandline/build/

2.镜像命令

docker images [OPTIONS]#查看本地主机上的镜像 [OPTIONS]:-a(列出本地所有的镜像(含历史映像层)),-q(只显示镜像的id),-aq (显示所有镜像的id)
docker search [OPTIONS] 镜像名	#搜索镜像 	[OPTIONS]:--limit(只列出N个镜像,默认25个)
docker pull 镜像名:版本 #下载镜像 不指定版本默认下载的是latest最新版
docker rmi -f 镜像id1 镜像id2	#删除指定的镜像
d/ocker rmi -f $(docker images -aq) 	#删除全部的镜像
docker system df #查看镜像/容器/数据卷所占的空间
#谈谈docker虚悬镜像是什么?
#仓库名、标签都是<none>的镜像,俗称虚悬镜像dangling image	有时在构建时会出现问题导致它的出现;

3.容器命令

  • 新建容器并启动
docker run [OPTIONS] 镜像名:版本号
#OPTIONS说明
	--name="容器新名字"     #为容器指定一个名称
	-d	#后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
	-i	#以交互模式运行容器,通常与 -t 同时使用;
	-t	#为容器重新分配一个伪输入终端,通常与 -i 同时使用;即启动后在前台启动伪终端,等待命令交互);
	-P	#随机端口映射,大写P
	-p 	#指定端口映射,小写p

#使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it -p 80:80 centos /bin/bash
#参数说明:
	-i	#交互式操作。
	-t	#终端。
	-p 80:80	#端口映射ip
	centos	#centos 镜像。
	/bin/bash	#放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
	 exit	#在交互式shell中输入exit退出终端。
  • 列出容器
docker ps [可选参数]	#列出容器
#可选参数列表
-a	#列出当前所有正在运行的容器+历史上运行过的
-q 	#静默模式,只显示容器编号。
-aq #显示所有容器的id
-l	#显示最近创建的容器。
-n=个数  #显示最近n个创建的容器。
  • 退出容器
exit	#run进去容器,exit命令退出,容器停止;
ctrl+p+q	#run进去容器,组合键ctrl+p+q退出,容器不停止;
  • 启动和停止容器的操作
docker start 容器id #启动容器 
docker restart 容器id #重启容器 
docker stop 容器id #停止正在运行的容器 
docker kill 容器id #强制停止容器
  • 删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rf 
d/ocker rm -f $(docker ps -aq) #删除所有容器   表达式中为查询到的容器id	-f代表强制删除
d/ocker ps -a -q|xargs docker rm #删除所有的容器

4.其它常用命令

  • 查看日志
docker logs [可选参数]
#可选参数列表
-f	#显示日志并更新
-t	#显示当前日志不会更新
-tf #显示日志信息并一直更新
--tail number #需要显示日志条数 
docker logs -tf --tail n 容器id #查看n行日志 
  • 查看容器的进程信息
docker top 容器id	
  • 查看镜像的元数据
docker inspect 容器id	# 可以用来获取Docker容器或者Docker镜像的元数据。
  • 进入当前正在运行的容器
docker exec -it 容器id /bin/bash	#常用,是在容器中打开新的终端,并且可以启动新的进程 用exit退出,不会导致容器的停止。
docker attach 容器id  #一般不用,直接进入容器启动命令的终端,不会启动新的进程 用exit退出,会导致容器的停止。
  • 容器与主机之间的文件拷贝
docker cp 容器id:容器内路径 主机目的路径
docker cp 主机目的路径 容器id:容器内路径
  • 容器的导入导出

docker export 容器ID > 文件名.tar 导出容器的内容留作为一个tar归档文件
在这里插入图片描述

cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号 #从tar包中的内容创建一个新的文件系统再导入为镜像
在这里插入图片描述

  • 为容器安装常用工具
apt update	#更新apt 工具
apt install vim	#安装vim编辑器

5. 小结

在这里插入图片描述

attach    Attach to a running container                 # 当前 shell 下 attach 连接指定运行镜像
build     Build an image from a Dockerfile              # 通过 Dockerfile 定制镜像
commit    Create a new image from a container changes   # 提交当前容器为新的镜像
cp        Copy files/folders from the containers filesystem to the host path   #从容器中拷贝指定文件或者目录到宿主机中
create    Create a new container                        # 创建一个新的容器,同 run,但不启动容器
diff      Inspect changes on a container's filesystem   # 查看 docker 容器变化
events    Get real time events from the server          # 从 docker 服务获取容器实时事件
exec      Run a command in an existing container        # 在已存在的容器上运行命令
export    Stream the contents of a container as a tar archive   # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history   Show the history of an image                  # 展示一个镜像形成历史
images    List images                                   # 列出系统当前镜像
import    Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info      Display system-wide information               # 显示系统相关信息
inspect   Return low-level information on a container   # 查看容器详细信息
kill      Kill a running container                      # kill 指定 docker 容器
load      Load an image from a tar archive              # 从一个 tar 包中加载一个镜像[对应 save]
login     Register or Login to the docker registry server    # 注册或者登陆一个 docker 源服务器
logout    Log out from a Docker registry server          # 从当前 Docker registry 退出
logs      Fetch the logs of a container                 # 输出当前容器日志信息
port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT    # 查看映射端口对应的容器内部源端口
pause     Pause all processes within a container        # 暂停容器
ps        List containers                               # 列出容器列表
pull      Pull an image or a repository from the docker registry server   # 从docker镜像源服务器拉取指定镜像或者库镜像
push      Push an image or a repository to the docker registry server    # 推送指定镜像或者库镜像至docker源服务器
restart   Restart a running container                   # 重启运行的容器
rm        Remove one or more containers                 # 移除一个或者多个容器
rmi       Remove one or more images      # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run       Run a command in a new container              # 创建一个新的容器并运行一个命令
save      Save an image to a tar archive                # 保存一个镜像为一个 tar 包[对应 load]
search    Search for an image on the Docker Hub         # 在 docker hub 中搜索镜像
start     Start a stopped containers                    # 启动容器
stop      Stop a running containers                     # 停止容器
tag       Tag an image into a repository                # 给源中镜像打标签
top       Lookup the running processes of a container   # 查看容器中运行的进程信息
unpause   Unpause a paused container                    # 取消暂停容器
version   Show the docker version information           # 查看 docker 版本号
wait      Block until a container stops, then print its exit code   # 截取容器停止时的退出状态值

Docker镜像讲解

1.Docker镜像加载原理

  • UnionFs (联合文件系统)
    UnionFs是一种分层、轻量级并且高性能的文件系统,他支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是 Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
    特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

  • Docker镜像加载原理
    docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。 boots(boot file system)主要包含 bootloader(加载器)和 Kernel(内核), bootloader主要是引导加载 kernel, Linux刚启动时会加载bootfs文件系统,在 Docker镜像的最底层是 boots。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs转交给内核,此时系统也会卸载bootfs。 rootfs(root file system),在 bootfs之上。包含的就是典型 Linux系统中 的/dev,/proc,/bin,/etc等标准目录和文件。 rootfs就是各种不同的操作系统发行版,比如 Ubuntu, Centos等等。
    在这里插入图片描述

  • 平时我们安装进虚拟机的CentOS都是好几个G,为什么Docker这里才200M?
    对于一个精简的操作系统,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用宿主机的kernel,自己只需要提供rootfs就可以了。由此可见对于不同的Linux发行版,boots基本是一致 的, rootfs会有差別,因此不同的发行版可以公用bootfs.

2.分层理解

  • 疑问:我们去pull一个镜像,下载的日志输出,可以看到是一层层的在下载,这么做的原因是什么?
    在这里插入图片描述
    最大的好处就是资源共享,就像上图的redis镜像是由eff15d958d66镜像构建而来,这里的eff15d958d66镜像已经下载过了,那么宿主机只需在磁盘上保留一份eff15d958d66镜像,同时内存中也只需要加载一份eff15d958d66镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。

可以通过命令去查看镜像中的roots节点下的分层信息

docker image inspect redis

理解
当容器启动时,一个新的可写层被加载到镜像的顶部。 这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。
所有的 Docker镜像都起始于一个基础镜像层,当进行修改或添加新的内容时,就会在当前镜像层之上创建新的镜像层,当容器启动时,一个新的可写层加载到镜像的顶部,这一层就是我们通常说的容器层,容器之下的都叫镜像层!当我们使用commit命令时会将当前容器和镜像打包成一个完整的镜像放到仓库中。
在这里插入图片描述

3.commit命令将当前容器制作成镜像

# docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]
# 1、启动一个默认的
docker run -it ubuntu 
# 2、使用vim命令,提示命令不存在
docker exec -it 容器id 
vim a.txt
# 3、安装vim
apt update	#更新apt 工具
apt install vim	#安装vim编辑器
# 4、将操作过的容器通过commit提交为一个镜像! 
docker commit -a="xingfeng" -m="add vim" bdad6a3b1fca ubuntu:1.0
# 5.docker images 查看当前镜像会发现多了一个tomcatMy:1.0镜像

场景:使用docker run -it ubuntu 创建一个容器,使用vim命令,提示命令不存在

  1. 使用命令安装vim命令
    在这里插入图片描述

  2. 使用commit命令将安装了vim的容器副本提交使之成为一个新的镜像 ,并使用该镜像创建命令,发现该镜像创建的容器已经可以使用vim
    在这里插入图片描述

4.小总结

Docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像。类似Java继承于一个Base基础类,自己再按需扩展。
新镜像是从 base 镜像一层一层叠加生成的例如上面说的安装vim。每安装一个软件,就在现有镜像的基础上增加一层。
在这里插入图片描述

本地镜像发布到阿里云

1.本地镜像上传/获取阿里云流程

在这里插入图片描述

2.新建阿里云仓库

  1. 选择控制台,进入容器镜像服务
    登录阿里云搜索

  2. 新建个人实例并设置固定登录密码
    在这里插入图片描述
    在这里插入图片描述

  3. 创建命名空间
    在这里插入图片描述
    在这里插入图片描述

  4. 点击管理获取上传/获取镜像的命令
    在这里插入图片描述
    在这里插入图片描述

3.从阿里云上传/获取镜像

复制管理页面的命令并执行实现镜像的上传和获取;
镜像有两种获取方式1.通过本地容器使用commit命令创建,2.使用dockerFile制作;

本地镜像发布到私有库(Docker Registry)

Docker Registry是官方提供的工具,可以用于构建私有镜像仓库;

# 下载镜像Docker Registry
docker pull registry 

# 运行Docker Registry   并将文件容器内的文件挂载到本地的/user/local/docker/myregistry/
docker run -d -p 5000:5000  -v /user/local/docker/myregistry/:/tmp/registry --privileged=true registry

# 进入容器内部  注意这里不能使用/bin/bash  因为registry镜像使用的是精简版  使用/bin/sh进入容器内部
docker exec -it 容器id /bin/sh 

# 为ubuntu镜像安装ifconfig 命令
apt update	
apt install net-tools

# 使用当前容器制作镜像
docker commit -m="add ifconfig" -a="xingfeng" 069358cb8adc myubuntu:1.1
docker images
#	REPOSITORY       TAG       IMAGE ID       CREATED         SIZE
#	myubuntu         1.1       c049492023c9   3 seconds ago   122MB

# curl查看私服库上有什么镜像
curl -XGET http://127.0.0.1:5000/v2/_catalog

# 将新镜像myubuntu:1.1修改成符合私服规范的Tag
#按照公式: docker   tag   镜像:Tag   Host:Port/Repository:Tag
docker tag myubuntu:1.1  127.0.0.1:5000/myubuntu:1.1
# 使用docker images查看镜像发现多了一个
#REPOSITORY                        TAG       IMAGE ID       CREATED         SIZE
#myubuntu                          1.1       c049492023c9   5 minutes ago   122MB
#127.0.0.1:5000/myubuntu           1.1       c049492023c9   5 minutes ago   122MB

#docker默认不允许http方式推送镜像	修改配置文件使之支持http
vim /etc/docker/daemon.json
#registry-mirrors配置的是国内阿里提供的镜像加速地址
{
  "registry-mirrors": ["https://aa25jngu.mirror.aliyuncs.com"],
  "insecure-registries": ["127.0.0.1:5000"]
}
# 重启守护进程和docker
sudo systemctl daemon-reload
sudo systemctl restart docker

# push推送到私服库
docker push 127.0.0.1:5000/myubuntu:1.1

# curl验证私服库镜像是否上传成功
curl -XGET http://127.0.0.1:5000/v2/_catalog

# pull到本地并运行
docker pull 127.0.0.1:5000/myubuntu:1.1

容器数据卷

写在前面

–privileged=true
创建容器涉及到容器卷挂载一定要加上,否则Docker挂载主机目录访问可能会出现cannot open directory .: Permission denied
原因:CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,在SELinux里面挂载目录被禁止掉了,如果要开启,我们一般使用–privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。

1.什么是容器卷?

  • 定义:
    卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

  • 命令格式

#将docker容器内的数据保存进宿主机的磁盘中,运行一个带有容器卷存储功能的容器实例。
 docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录      镜像名

2.容器卷能干吗?

我们创建mysql容器,数据都是存在容器中的,如果删除容器数据也会丢失,这时就可以使用容器卷将MySQL数据存储在本地。
特点:

  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可以直接实时生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

3.使用数据卷

3.1 基本用法

#语法
docker run -it --privileged=true -v /宿主机绝对路径目录1:/容器内目录1 -v /宿主机绝对路径目录2:/容器内目录2 镜像名
#示例
docker run -it --name=myubuntu --privileged=true -v /tmp/myHostData:/tmp/myDockerData ubuntu /bin/bash

#查看数据卷是否挂载成功
docker inspect 容器ID
"Mounts": [
    {
        "Type": "bind",
        "Source": "/tmp/myHostData",
        "Destination": "/tmp/myDockerData",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
  • 容器和宿主机之间数据共享
    docker容器内修改文件,宿主机同步修改 。
    宿主机上修改文件,docker容器内同步修改。
    docker容器stop,宿主机上文件修改,docker重启容器内同步修改。

3.2 读写规则映射添加说明

docker run -it --privileged=true -v /tmp/myHostData:/tmp/myDockerData ubuntu	#这条命令和下面的是相等的
docker run -it --privileged=true -v /tmp/myHostData:/tmp/myDockerData:rw ubuntu
rw = read + write意为在容器内部的/tmp/myDockerData文件夹是可读可写的,默认就是rw,可以选择的还有
ro = read only 容器实例内部被限制,只能读取不能写,只能通过宿主机路径去修改

3.3 卷的继承和共享

#容器1完成和宿主机的映射
docker run -it  --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu
#容器2继承容器1的卷规则
docker run -it  --privileged=true --volumes-from 父类  --name u2 ubuntu

#此时容器1和容器2共享/tmp  对/tmp文件夹中的修改在两个容器中都会被体现

4.匿名挂载和具名挂载

# 匿名挂载 -v 容器内文件路径
docker run -d -p 80:80 --name nginx01 -v /etc/nginx nginx
#使用命令查看卷的内容
docker volume ls
#	DRIVER    VOLUME NAME
#	local     b5f2d6b14a06d7f76c8040eff735c0e03342027928cdd801bd5fb8051d33c031

# 具名挂载 -v 卷名称:容器内文件路径
docker run -d -p 80:80 --name nginx02 -v juming-nginx:/etc/nginx nginx
docker volume ls
#DRIVER    VOLUME NAME
#local     juming-nginx

#使用命令查看卷的元信息
docker volume inspect juming-nginx(容器卷名)
[
    {
        "CreatedAt": "2021-11-24T22:34:53+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]

所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxxx/_data 下

5.使用DockerFile挂载目录

Dockerfile就是用来构建docker镜像的命令脚本!这里无需关注shell脚本的内容只需关注挂载的功能

# 创建dockerfile文件 
# 1.文件内容如下:以centos镜像为基础,将centos中的volume01和volume02目录匿名挂载创建一个新的镜像,并打印----end----后进入bash
FROM centos 
VOLUME ["volume01","volume02"] 
CMD echo "----end----" 
CMD /bin/bash

# 2. 使用build命令构建镜像
docker build -f /dockerData/dockerFile/dockerfile01.txt -t walkwind/centos:1.0 .

#3. 启动自己创建的镜像
docker run -it --name centos01 1d3fc65e7589  /bin/bash
#4. 原来的centos镜像中并没有volume01和volume02目录,所以在walkwind/centos:1.0容器中自动创建
#5. 查看一下当前容器卷挂载信息,使用的是匿名挂载卷信息存储在/var/lib/docker/volumes/xxx/_data
docker inspect 容器id
#6. 修改容器宿主机文件容器同步更新

常规安装简介

1.安装nginx

# 1.搜索镜像  建议在docker官网上搜索会有详细的使用文档
# 2.拉取镜像
docker pull nginx
# 3.启动容器并拷贝主要文件到本地然后删除容器
docker run --restart=always --name=nginx -p 80:80 -d nginx
docker cp nginx:/etc/nginx /root/docker/nginx/conf
docker cp nginx:/usr/share/nginx/html /root/docker/nginx/html
docker cp nginx:/var/log/nginx /root/docker/nginx/logs
docker stop nginx
docker rm nginx
# 4.启动容器进入容器内部
docker run --restart=always --name=nginx -p 80:80 -v /root/docker/nginx/conf:/etc/nginx -v /root/docker/nginx/html:/usr/share/nginx/html -v /root/docker/nginx/logs:/var/log/nginx -v /home/pre_server:/home/pre_server -d nginx
# 5.访问localhost:80页面是否成功

2.安装tomcat

# 1.搜索镜像  建议在docker官网上搜索会有详细的使用文档
# 2.拉取镜像
docker pull tomcat:8.0
# 3.使用镜像启动容器
docker run -d --name tomcat8 -p 8080:8080 tomcat:8.0
# 4.进入容器内部
docker exec -it tomcat8 /bin/bash
# 5.文件挂载?使用-v命令数据卷知识后面记录

3.安装es+kibana

安装es

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2   
#会自动下载镜像并启动容器,es的web端口为9200,分布式节点之间通信使用9300,-e是环境变量这里配置了集群方式和最大最小内存

安装kibana

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://47.97.65.83:9200 -p 5601:5601 -d kibana:7.6.2
# -e 环境变量配置了es的地址 注意es和kibana之间的版本问题

es 和kinbana属于两个不同的文件系统都类似一个小型的liunx,使用kibana连接es他们之间如何进行网络连接和数据传输的?后面记录

4.安装portainerdocker的可视化工具

Docker图形化界面管理工具!提供一个后台面板供我们操作镜像容器等!

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

5.mysql安装

# 获取镜像
docker pull mysql:8.0.28

# 创建容器
docker run -d -p 13306:13306 --privileged=true -v /usr/local/dockerData/mysql/log:/var/log/mysql -v /usr/local/dockerData/mysql/data:/var/lib/mysql -v /usr/local/dockerData/mysql/conf:/etc/mysql/conf.d -eMYSQL_ROOT_PASSWORD=123456 --name mysql mysql:8.0.28

# 在/dockerData/mysql/conf新建my.cnf通过容器卷同步给mysql容器实例
[client]
default_character_set=utf8
[mysqld]
port = 13306
collation_server = utf8_general_ci
character_set_server = utf8

6. kafka安装

# kafka官方没有提供东侧客人警巡官

sudo docker run -d  --privileged=true --name kafka_3.3.2 -p 9092:9092 -p 9093:9093 -p 9094:9094 -e KAFKA_BROKER_ID=0  -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -e KAFKA_ZOOKEEPER_CONNECT=172.38.55.110:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.38.55.109:9092 -e ALLOW_PLAINTEXT_LISTENER=yes -v /usr/local/dockerData/kafka/data:/bitnami/kafka/data -v /usr/local/dockerData/kafka/config:/bitnami/kafka/config bitnami/kafka:3.3.2

DockerFile

1.Docker构建过程

  1. 编写一个dockerFile文件:定义了一切的步骤,源代码
  2. DockerImages :使用docker build通过DockerFile文件生成镜像,最终发布和运行产品。
  3. Docker容器:就是镜像docker run运行起来提供服务。
  4. docker push 发布镜像到DockerHub 或阿里云仓库。

2.DockerFile常用指令

FROM # 构造的新镜像是基于哪个镜像
MAINTAINER # 镜像是谁写的  姓名+邮箱 
RUN # 构建镜像时运行的shell命令
ADD # 拷贝文件或者目录到镜像,如果是URL或者压缩包会自动下载或者自动解压
WORKDIR # 镜像的工作目录 
VOLUME # 挂载的目录 
EXPOSE # 指定于外界交互的端口,即容器在运行时监听的端口
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。 
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令 
ONBUILD # 当构建一个被继承的DockerFile,这个时候就会运行ONBUILD的指令,触发指令。
COPY # 类似ADD,将我们文件拷贝到镜像中 
ENV # 构建的时候设置环境变量!

docker history 镜像id # 我们可以列出本地进行的变更历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值