docker基础知识

1.什么是docker

docker是一个开源的应用容器引擎。开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

docker基本组成:

镜像(image):是一个轻量级、独立的、可执行的软件包,包含了运行应用程序所需的一切:代码、运行时环境、系统工具和库。镜像(image)是不可修改的,任何更改都会创建一个新的镜像。镜像是用于创建容器(container),镜像可以创建多个相同的容器实例。

就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。这个文件包是只读的。 

容器(container):是独立运行的一个或一组应用,应用程序或服务运行在容器里面。 容器(container) 是从 镜像(image) 创建的运行实例,它可以被启动、开始、停止、 删除。 每个 d容器(container) 都是相互隔离的,应用程序在不同的容器中运行不会相互影响,保证安全的平台。

容器保护三个状态:

  • 运行:进程正常运行

  • 暂停:进程暂停,CPU不再运行,并不释放内存

  • 停止:进程终止,回收进程占用的内存、CPU等资源

仓库(registry):镜像仓库是用于存储和分发 docker 镜像的地方。最常用的公共镜像仓库是 Docker Hub,上面有大量的官方和社区共享的镜像。此外,还可以搭建私有的镜像仓库,用于存放自己的镜像。

2.docker安装条件

docker 要求 CentOS 系统的内核版本高于 3.10

#查看内核
uname -r

3.docker官网:https://www.docker.com 

4.安装步骤

  • 如果要卸载老的版本,或者卸载,可执行命令:
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  • 但是一些镜像、容器、数据卷会存储在/var/lib/docker/目录下,需要你手动删除
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

安装方法:

  1. 在docker存储库中安装,以便于安装和升级任务,这是推荐的方法。
  2. 可以下载RPM软件包,手动安装,并完全手动管理升级。这在无法访问互联网的气隙系统上安装docker等情况下非常有用。
  3. 在测试和开发环境中,可以使用自动化的便利脚本来安装docker

介绍第一种:

  • 在新主机上首次安装Docker Engine之前,您需要设置Docker存储库。之后,可以从存储库中安装和更新Docker
#安装docker引擎库软件包
sudo yum install -y yum-utils

#设置镜像仓库
#国外镜像仓库配,如果设置国外的会出现[Errno 14]curl#35-TCP connection reset by peer 或者[Errno 12] curl#35 -Timeout
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

#国内镜像,设置阿里云镜像地址(推荐)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  • 安装Docker Engine(docker引擎)最新的版本执行:
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

  • 启动docker
#启动docker
sudo systemctl start docker
#停止docker
sudo systemctl stop docker
#重启docker
sudo systemctl restart docker
#重载docker
sudo systemctl reload docker
#查看docker状态
sudo systemctl status docker

#查看docker版本
docker version

#设置docker开机启动
systemctl enable docker

  • 通过运行helloworld镜像验证docker引擎安装是否成功
sudo docker run hello-world

5.卸载docker

#停止docker
sudo systemctl stop docker
#卸载命令
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
#镜像、容器、数据卷或者自定义配置文件不会自动删除,需要你手动删除
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

6.设置阿里云镜像加速器

7.基本命令

  • docker inames 查看本地镜像
  • docker inames -a 查看本地所有镜像(含历史映像层)
  • docker inames -q 只显示镜像ID

REPOSITORY:表示镜像的仓库源

TAG:镜像的标签版本号

IMAGE ID:镜像id

CREATED:镜像创建时间

SIZE:镜像大小

  • docker search  某个镜像名字 查找某个镜像
  • docker search --limit 5 某个镜像名字 查找某个镜像限制前5条

 NAME:镜像名字

DESCRIPTION:镜像说明

STARS:点赞数

OFFI:是否是官方的

  • docker pull 某个镜像名字 拉取某个镜像
  • docker pull 某个镜像名字[:TAG] 拉取某个镜像加版本号

  • docker system df 查看镜像/容器/数据卷所占的空间

  • docker rmi 某个镜像名字id 删除某个镜像
  • docker rmi -f 某个镜像名字id 强制删除某个镜像
  • docker rmi -f $( docker images -qa) 删除全部的镜像

  • docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] 运行容器

OPTIONS允许您配置容器的选项:

        --name="容器新的名字"  为容器指定一个名称

        -d 后台运行容器并返回容器id,也即启动守护式容器(后台运行)

        -i 以交互模式运行容器,常与-t同是使用

        -t 为容器重新分配一个伪终端,常与-i同时使用

        -P 随机端口映射

        -p 指定端口映射

  • docker ps [OPTIONS] 列出正在运行的容器

OPTIONS选项说明:

        -a 列出当前所有正在运行的容器+历史上运行过的容器

        -l 显示最近创建的容器

        -n 显示最近n个创建的容器

        -q 静默模式,只显示容器编号

  • 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或者容器名称 删除已经停止的容器
  • docker rm -f $(docker ps -a -q)  删除所有容器(谨慎使用)
  • docker ps -a -q | xargs docker rm  删除所有容器(谨慎使用)
  • docker logs 容器id 查看容器日志
  • docker top 容器id 查看容器运行进程
  • docker inspect 容器id 查看容器的内部细节
  • docker exec -it 容器id /bin/bash 重新进入容器 用exit退出的话不会导致容器停止(推荐使用)
  • docker attach 容器id 重新进入容器 用exit退出的话会导致容器停止
  • docker cp 容器id:/home/1.txt /home 把容器里的1.txt文件复制到主机home文件夹下
  • docker export 容器id > aa.tar 把容器打包tar文件到主机当前目录
  • cat aa.tar | docker import - name/ubuntu:2.4 把打包的容器恢复成功镜像
  • docker commit -m = "提交的描述信息" -a="作者" 容器id 要创建的镜像名称:[标签名] 提交容器使之为新的镜像
  • docker commit -m="vim" -a="ghw" 41d41b8a2d29 myname/ubuntu:3.0

8.docker网络

docker安装后,会自动创建3个网络,可以使用以下命令查看,默认采用bridge桥接网络

docker network ls

ip addr

  •  docker安装成功后会出现docker0的网络设备,本质是一个虚拟网桥
#没有安装可以执行安装
yum install bridge-utils -y

#查看
brctl show
  • 运行的容器会创建自己的虚拟的网卡

docker0的作用:

  1. 给容器分配IP地址(与docker0同网段)
  2. 给容器分配Mac地址
  3. 是每个容器的默认网关
  4. 同一个宿主机的各个容器之间通信基础(都接入docker0网桥)宿主机和容器之间通信的基础

容器与容器之间的互连:

        默认情况下,docker容器之间都是通过ip可以互相联通的

        基于安全考虑,通过 vim /etc/docker/daemon.json 在末尾添加配置:

#禁止容器执行网络连接(但此配置不对--link 生效)
"icc":false

#重启docker
service docker restart

        通过docker run --link 容器名:别名,直接修改容器hosts映射

自定义网络:

        为何需要自定义网络

        容器的隔离,提高安全性;DNS解析和服务发现;容器与外网的连接;容器之间的负载均衡

        创建自定义网络

# --driver代表驱动类型,默认bridge
# --subnet代表网段设置,默认docker0地址上递增
# 通过 docker network ls 查看自定义网络
# 通过 dicker network inspect 查看使用本网络的详情  
docker network create [--driver 驱动类型] [--subnet=192.168.1.1/24] 自定义网络名

        使用自定义网络        

#容器启动时
docker run --network 自定义网络名称
#容器启动后
docker network connect 自定义网络名称

        删除自定义网络

docker network rm 网络名

9.本地镜像发布到私有库

  • 下载镜像Docker Registry
docker pull registry

  • 运行私有库Registry,相当于本地有个私有Docker hub
docker run -d -p 5000:5000 -v /home/registry/:/tmp/registry --privileged=true registry

  • 模拟发送一个请求,看有没有上传过镜像
curl -XGET http://124.xxx.57.252:5000/v2/_catalog

  • 将新镜像修改成符合私服规范的Tag
docker tag 镜像:Tag Host:Port/Repository:Tag

docker tag myname/ubuntu:3.0 124.xxx.57.252:5000/myname/ubuntu:3.0

  • 修改配置文件使之支持http
cat /etc/docker/daemon.json

{
  "registry-mirrors": ["https://vn8qybfk.mirror.aliyuncs.com"],
  #安全注册你的ip地址
  "insecure- registries":["124.xxx.57.252:5000"]
}
#重启docker
systemctl restart docker
#重新运行
docker run -d -p 5000:5000 -v /home/registry/:/tmp/registry --privileged=true registry
  • push推送到私服库
docker push 124.xxx.57.252:5000/myname/ubuntu:3.0

  • pull拉取到私服库 
docker pull 124.xxx.57.252:5000/myname/ubuntu:3.0

9.容器数据卷

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

  • --privileged=true 解决挂载主机目录访问如果出现cannot open directory :Permission denied
  • docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录  镜像名

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录  镜像名

例如:

docker run -d -p 5000:5000 -v /home/registry/:/tmp/registry --privileged=true registry

-v 添加自定义的容器卷

/home/registry/ 主机的路径

/tmp/registry 容器内的路径

--privileged=true 放开权限

 

  • docker inspect 容器id 查看容器的内部细节

  • docker run -it --privileged=true --volumes-from父类--name u2 ubuntu 容器2继承容器1的卷规则
  • docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu

10.DockerFile

dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本 

常用的保留字指令

  1. FROM 基础镜像,当前镜像来源于哪里,指定已存在的模版镜像
  2. MAINTAINER 镜像维护者的姓名和邮箱地址
  3. RUN 容器构建时需要运行的命令 两种格式 shell格式 exec格式 run是在docker build时运行
  4. ADD|COPY 将本地文件添加到镜像中(ADD能自动解压拷贝的压缩包、还能直接请求下载URL)
  5. WORKDIR 设置当前工作目录
  6. VOLUME 创建数据卷挂载点
  7. EXPOSE 声明运行容器时监听的端口
  8. ENV 设置环境变量
  9. CMD 容器启动时默认执行的命令(会被运行的command覆盖)
  10. ENTRYPOINT 容器启动时运行的启动命令(不会被运行的command覆盖)
  11. USER。用户和用户组
  12. ARG  指定构建参数
  13. LABEL  自定义标签

构建镜像命令

  • docker build -f Dockerfile -t myname:TAG .   -f  要构建的dockerfile文件当前目录可以省略 -t 构建镜像的名字 TAG标签 . 点表示当前目录 

11.Docker-Compose

Docker-Compose,是Docker中用于定义和运行多容器应用程序的工具通过compose可以使用一个YML文件来配置应用程序需要的所有服务通过使用一个命令,就可以从YML文件中创建并启动所有服务

  1. 编写docker-compose.yml构成应用程序的服务
  2. 执行docker-compose up命令来启动运行整个应用程序 

安装:

11.1 Mac操作系统、windows操作系统

        Mac和Windows操作系统的Docker Desktop和Docker Toolbox已经包括compose和其他Docker应用程序,用户不需要单独安装

11.2 Linux操作系统
#安装Docker引擎时附带docker-compose插件
sudo yum install -y docker-ce docker-ce-cli \
containerd.io docker-buildx-plugin docker-compose-plugin

#安装Docker引擎后补充安装docker-compose插件
sudo yum install -y docker-compose-plugin

#查看版本号
docker-compose version
11.3  docker-compose.yml文件
  • version 定义docker-compose.yml文件的格式版本 (已过时)
  • name 定义应用程序使用的名字
  • services  定义应用程序所需的服务集合 
service:
    mysql:
    #mysql服务配置项
    redis:
    #redis服务配置项
  • networks  定义应用程序使用的网络
networks:
    net1: #网络名称为:应用程序名_net1
    driver:bridge #默认bridge网络模式
    net2:
  • images 服务所使用的本地镜像名称
  • container_name 服务所使用的容器名字
  • ports 服务所使用的端口映射 
ports:
    - "8080:8080"
    - "80:80"
  • volumes 服务所使用的数据卷 
volumes:
    - /宿主机路径:/容器路径
  •  environment 服务所使用的环境变量
environment:
    - MYSQL_ROOT_PASSWORD=123456
  • env_file 服务所使用的环境变量 
env_file:
    - .mysql_env  #与ym1文件同路径下的 .mysql_env
  •  expose 服务对外暴露的端口
expose:
    - "3306"
  • build 服务所使用的自定义镜像 
build:
    context:./db #指定Dockerfile使用的上下文目录
    dockerfile:appdb #指定context路径下的dockerfile文件名,若使用默认名字则无需指定改项
#自定义镜像的名字=应用程序名-服务名
  • depends_on 指定本服务所依赖的其他服务,应确保先启动所依赖的服务,后启动当前的服务 
depends_on:
    - 依赖的服务名
  • command 指定本服务启动后的默认命令 
command:["java","-jar","myapp.jar"]
11.4 docker-compose命令 
  1. docker compose config 验证和显示由 docker-compose.yml 文件定义的服务配置
  2. docker compose up [-d] 启动应用程序所需的所有服务。-d代表后台运行
  3. docker compose ps 查看已经启动的容器
  4. docker compose stop | kill [容器名称] 停止已经启动的容器
  5. docker compose start | restart [容器名称] 启动被停止的容器(重启容器)
  6. docker compose exec 容器名 bash 进入容器
  7. docker compose logs [-f] 查看服务日志。-f代表输出实时日志信息
  8. docker compose down 用于停止和移除由 docker-compose up 创建的容器、网络和卷

12.虚悬镜像

 虚悬镜像执行docker images 出现既没有仓库名也没有标签,在dockerfile构建执行 docker build . 没有加-t 会出现虚悬镜像,虚悬镜像就是错乱的,出现的话直接删除就可以了

  • docker images ls -f dangling=true  查询当前有的虚悬镜像
  • docker images prune  删除所有的虚悬镜像

13.Docker可视化工具的使用

Portainer是一款docker容器管理平台,提供可视化的UI管理工具;Portainer由G0语言编写,占用资源少(轻量级),支持单机和集群的Docker环境

官网地址:https://www.portainer.io/ 

文档地址:https://docs.portainer.io/start/install-ce/server/docker/linux

#安装
docker pull portainer/portainer-ce:latest
#创建数据卷
#说明:创建命名数据卷 portainer_data, 保存路径/var/lib/docker/volimes/portainer_data/data
docker volume create portainer_data
#运行
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

执行后访问:https://ip:9443 注意点是这里用的https安装的要加s

 创建用户就可以使用了

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值