Docker学习笔记

参考:Docker-从入门到实践

刚开始学Hyperledger Fabric的时候关于Docker的知识草草看了一下就过去了,后面才发现对区块链的网络不知所以然,于是重新学了Docker,再去看Fabric网络部分的时候豁然开朗。

  • 基本概念
  • Ubuntu安装Docker
  • 镜像
  • 容器
  • 仓库
  • Docker数据管理
    • 数据卷
    • 挂载主机目录
  • 使用网络
    • 外部访问容器
    • 容器互联
    • 配置DNS
  • Docker Compose
    • Compose模板文件
  • 其它学习资源
  • docker常用命令

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

基本概念

  • 镜像(Image):是一个特殊的文件系统,分层构建。
  • 容器(Container):一个镜像可以产生多个容器。不要向存储层写入,因为容器消亡时存储层随之消亡,应用数据卷(Volume)写入,数据卷独立于容器。
  • 仓库(Respository):一个 Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

Ubuntu安装Docker

安装教程

测试是否安装成功

docker run hello-world

镜像

Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像。

镜像ID是镜像唯一的标识。

  • 搜索镜像

docker search image_name

  • 拉取镜像

docker pull name:tag

注:以上命令省略了仓库地址,默认为Docker Hub,省略了仓库名,Docker Hub的默认仓库为library。

  • 列出镜像

docker image ls

注意上面这个命令只显示了顶层镜像,还有中间层镜像,可用这个命令显示全部镜像

docker image ls -a

如果要列出镜像的ID,则用参数 -q,如docker image ls -q

  • 查看并删除虚悬镜像

一般虚悬镜像没有存在的价值。

docker image ls -f dangling=true  //查看

docker image prune  //删除
  • 删除镜像

可以使用ID、镜像名、摘要删除镜像

docker image rm  ID|镜像名|摘要

docker image rm $(docker image ls -q redis) //删除所有仓库名为redis的镜像
  • 查看镜像、容器、数据卷所占的空间
docker system df
  • Dockerfile

使用Dockerfile定制镜像

容器

  • 查看容器
docker container ls  //列出运行中的容器

加参数-a查看所有容器(包括终止状态的容器)
- 新建容器并启动

docker run -t -i ubuntu:14.04 /bin/bash //启动一个bash终端,允许用户进行交互。

-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。

如果要后台运行加参数-d

docker container logs [container ID or NAMES]  //后台运行情况下查看输出的信息
  • 启动已终止的容器
docker container start yourStoppedContainer
  • 停止容器
docker container stop [ID or name]

docker container restart [ID] \\重启容器
  • 进入容器

容器后台运行时进入容器

docker exec [ID or name]  //可加参数-i -t等

docker exec -it ubuntu bash  //eg
  • 删除容器
docker container rm [ID or name] 
docker container prune  //清除所有处于终止状态的容器

仓库

通过docker search命令来查找官方仓库中的镜像,并利用 docker pull命令来将它下载到本地。

Docker数据管理

两种方式:
- 数据卷(Volume)
- 挂载主机目录(Bind mounts)

数据卷

被设计用来持久化数据的,它的生命周期独立于容器

  • 创建一个数据卷
docker volume create my-vol
  • 查看数据卷
docker volume ls
  • 清空无主数据卷
docker volume prune

挂载主机目录

就是挂载本地文件到容器

使用网络

外部访问容器

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过-P或-p参数来指定端口映射。

使用-p时,随机映射49000-49900之间的一个端口到容器的端口。

-p 也可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort。

容器互联

将容器加入自定义的网络来连接多个容器。

  • 新建网络
docker network create -d bridge my-net

其中-d指定网络类型,可选bridgeoverlay

  • 连接容器

运行一个容器并连接到新建的my-net 网络

docker run -it --rm --name busybox1 --network my-net busybox sh

其中--rm指定结束运行时删除该容器,--name指定容器的名字

加入同一个网络的容器可以ping通。

配置DNS

  • 在/etc/docker/daemon.json中自动配置
  • 也可运行容器时通过参数手动配置,比如设定容器的主机名:-h HOSTNAME

Docker Compose

用于快速部署分布式应用。

通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。

  • 运行compose项目
docker-compose up

其他命令

Compose模板文件

  • 每个服务都必须通过 image 指令指定镜像或 build 指令(需要Dockerfile)等来自动构建生成镜像。
  • command:容器启动后默认执行的命令command: echo "hello world"
  • env_file:从文件中获取环境变量
  • environment:环境变量,字典格式
  • labels:为容器添加Docker元数据(metadata)信息。例如可以为容器添加辅助说明信息。
  • networks:配置连接的网络
  • volumes:数据卷所挂载路径设置。
  • extends:扩展服务(感觉就像面向对象里的继承一样=_=)

其它学习资源

Docker一百问

docker常用命令

终止并删除所有容器

  • docker stop (docker ps -q) & docker rm (docker ps -q) & docker rm (docker ps -aq)

kill any stale or active containers:

  • docker rm -f $(docker ps -aq)

Clear any cached networks:

  • docker network prune

你可能感兴趣的:(区块链)