docker初识

初识docker

我们写代码的时候会接触到多个环境:开发环境(程序员自己写代码的环境),测试环境(在别人那边测试代码可行与否),生产环境(部署代码)

但是,我们可能在本机跑可以,在别人的电脑就不行了,这可能是因为电脑的环境不同,可能使用了某一个库,而你没有安装,就会导致水土不服

所以就出现了 容器

容器直接将 代码和运行的环境打包,发给别人,别人使用的就都是同一套环境

docker 概念

  • docker是一个开源的 应用容器引擎
  • docker容器可以让开发者打包自己的应用以及依赖包一个轻量级,可移植的容器中,发布到任何linux机器上
  • docker开销很低
  • docker,不同的容器间是相互隔离,互不影响

总而言之:

docker是为了解决软件跨环境迁移的问题

安装docker

ubuntu上可以阅读 ubuntu安装docker

docker架构

  • clients

docker就是一个客户端,我们之后就通过docker发送命令给 守护进程

  • Host
  • image:镜像:就是把软件和软件的运行环境打包到一个镜像文件
  • container:容器,容器是镜像的实体,容器可以被 创建启动停止删除暂停

imagecontainer的关系将相当于类和对象的关系

根据 image 镜像文件,可以创建出很多 docker运行容器

容器一旦有了,这些软件也就自然有了

  • Registries

image都是要从远程拉取到本地才能使用,寄存在远程仓库进行集中处理

我们还可以 搭建私有的仓库,里面可以放我们自己的image

镜像加速

应为docker很多镜像都是在国外的,拉取速度比较慢,所以我们可以使用镜像加速

浏览 docker镜像加速,进行配置

docker命令

docker命令大全

进程服务相关命令

启动docker

1
systemctl start docker

观察docker状态

1
systemctl status docker

停止docker

1
systemctl stop docker

重启docker

1
systemctl restart docker

设置开机自动启动

1
2
systemctl enable docker

镜像相关文件命令

本地查看镜像文件

1
docker images

  • repository:hello-world,就是一个镜像文件,里面打包了很多 软件运行环境
  • tag:就是这个镜像文件的版本号
  • id:就是镜像的id
  • create:创建的时间
  • size:镜像的大小

查看本地的所有镜像id

1
docker images -q

搜索镜像文件

1
(sudo) docker search redis

搜索是否有redis镜像文件

name;搜索到和redis相关的镜像文件名

description:该文件的描述

official:是否是官方的


下载镜像文件

1
docker pull redis:(number)

:后面指定要下载的版本

如果没有指定的话,就是下载最新版本

可以登陆docker官方网站,搜索对应要下载的镜像名,查看版本号,添加在:后面即可


删除对应的镜像

1
docker rmi [image ID]

后面是要删除的镜像id

容器相关的命令

通过镜像文件实例出对应的对象

  • 创建容器
1
2
docker run -it --name=c1 redis /bin/bash

1
sudo docker run -id --name=c3 redis
  • -i :保持容器一直运行着,如果没有加的话,没有客户端连接,容器就会自动关闭,在容器关闭的时候自动关闭容器
  • -t:启动的时候可以添加一个终端
  • -d: 启动的时候不会自动进入容器,会在后台运行,退出之后容器不会关闭
  • –name=c1:给这个容器起名字为c1
  • redis :就是我们要启动的容器对应的镜像文件,可以在镜像文件后添加:,附带上版本号
  • /bin/zsh :进入容器的初始化指令

回车之后就进入了一个docker容器,就是一个linux的环境

  • 进入容器
    这个是需要使用-d创建出来的容器

    1
    2
    sudo docker exec -it c3 /bin/bash

    进入到c3这个容器中,/bin/bash后面就是指定的命令

  • 退出

    1
    exit
  • 查看容器

    • 查看历史上登陆过的所有容器

      1
      docker ps -a

      img

      • container id:容器的id
      • image:容器对应的镜像
      • command:进入容器对应的命令
      • names:容器的名字
    • 查看正在在线的容器

      1
      docker ps
  • 启动容器

  • 停止容器

    1
    sudo docker stop c3 

    c3就是我们要关闭的容器名

  • 删除容器

    1
    sudo docker rm c3

    c3就是我们要删除的容器的名字

    我们不能删除一个正在运行的容器

  • 查看容器的信息

    1
    sudo docker inspect c2

容器的数据卷

数据卷概念

  • 数据卷是宿主机的一个 目录文件

  • 当容器目录和数据卷目录绑定之后,对方的 修改会进行同步

    在容器里面的修改,宿主机上也能看到相应的变化,同样,宿主机上的变化,在容器里面也能看到

  • 一个数据卷可以被多个容器挂载

    解决了多个容器之间的数据交互

  • 一个容器可以挂载多个数据卷

数据卷的作用

  1. 实现了容器数据的持久化
  2. 外部机器和容器之间可以间接通信
  3. 容器之间可以实现数据交互
  4. 新容器挂载上原有已经存在的数据卷,可以共享里面存在的数据

配置数据卷

1
docker run ... -v 宿主机目录(文件):容器内目录(文件) ...
1
sudo docker run -id --name=c3 -v /home/zevin/docker_data:/root/docker_container redis

数据卷容器

多容器进行数据交互

  1. 多个容器可以挂载到同一个数据卷上
  2. 可以使用一个数据卷容器

数据卷容器就是一个容器,挂载到数据卷上,然后别的容器挂载到自己上,进行数据交互

相当于数据卷容器创建了宿主机目录的快捷方式,然后把快捷方式复制到了挂载的容器上,所以即使这个数据卷容器挂了也没有影响

本质就是 去中心化

同时,当容器需要挂载多个目录的时候,新容器可以照搬老容器的所有挂载,提高效率

配置数据卷容器

  1. 启动c3数据卷容器,使用-v 参数设置数据卷

    1
    sudo docker run -it --name=c3 -v /volume redis
  2. 传建启动c2,c1容器,使用 --volumes-from 参数来继承数据卷容器

    1
    sudo docker run -id --name=c1 --volumes-from c3 redis

docker初识
http://example.com/2023/01/21/docker初识/
作者
Zevin
发布于
2023年1月21日
许可协议