Docker基础介绍

发布时间:2025-01-06 人气:108次


概述

起源

2013 年由 DotCloud 公司开源出来的容器管理工具

DotCloud 公司是一家 PAAS 服务提供商,从 docker 的出身也可以看出它的主要功能和方向

技术原理

开始时是基于 LXC 容器技术

cgroup: 将任意进程进行分组化管理,同时还可以控制进程的资源占用(CPU, 内存等等)情况

namespace: 让每个进程组有独立的 PID, IPC 和网络空间

详细信息可以参照:http://www.cnblogs.com/wang_yb/p/3923040.html

解决的痛点

打包部署

运行环境标准化

更加高效的利用物理机

docker 基本命令

容器的一个标准的生命周期包括:创建,启动,停止,终止和移除

docker pull busybox # 远程下载 images

docker run -it –rm –name busybox busybox # 创建容器,名称为 busybox

docker stop/kill busybox # 停止/强行停止 容器

docker start/restart busybox # 启动/重新启动 容器

docker rm busybox # 移除容器

常用命令

docker exec 可以运行 容器中的命令

docker cp 可以在主机和容器之间复制文件

docker inspect 查看容器的详细信息,也可以查看镜像详细信息

docker stats 容器的资源占用信息

docker events 返回 docker 主机上发生的所有 docker 事件流

docker logs 监控容器的日志

docker top 查看容器内运行的进程

docker 使用示例(busybox)

docker 容器是完全隔离的运行环境,但实际使用中,难免需要和外部或者 docker 容器进行交互。

比较常用的交互主要有 环境变量,磁盘,网络

环境变量

docker run -it --rm -e MY_NAME=wangyubin busybox env

外部的环境变量可以在容器启动的时候注入到容器中

磁盘

容器会共享镜像中的内容,容器自己的状态才会保存在磁盘上。

docker volume ls # 查看所有容器占用的磁盘名称

docker volume inspect VOL_NAME  # 查看具体的磁盘信息

容器中的文件,不会改变 image

在一个容器中创建文件(test.txt)

$ docker run -it --rm busybox

/ # touch test.txt

/ # ls

bin       etc       proc      sys       tmp       var

dev       home      root      test.txt  usr

重新启动的容器中是不包含这个文件的

$ docker run -it --rm busybox

/ # ls

bin   dev   etc   home  proc  root  sys   tmp   usr   var

容器挂载外部的文件系统

如果希望容器之间共享文件,或者将文件放在容器之外来管理,可采用如下方式 容器启动时挂载外部文件夹

docker run -it --rm -v /home/wangyubin/tmp/volume:/share-dir busybox

cd share-dir

touch test.txt

另一个容器也挂载这个文件夹

docker run -it --rm -v /home/wangyubin/tmp/volume:/share-dir busybox

/ # ls share-dir

test.txt

网络

容器中的服务默认只有当前容器可以访问,容器的宿主和其他容器都是无法访问的。

通过暴露端口,让宿主可以访问容器内服务

通过 nc 命令模拟一个服务

$ docker run -it -p 1234:1234 --rm busybox

/ # nc -l -p 1234

在宿主机上可以通过 docker ps 命令看到暴露的端口

docker ps


nc localhost 1234   # 连接上本地的 1234 端口,就可以和 docker 容器互发消息

容器创建在同一网络上

创建容器运行的网络,然后将 2 个容器启动到同一个网络上

$ docker network create test

a85b5589234b701b1237a364f7796b47e2d1ba4506740767c581a3d62d9e8f48


$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE

a85b5589234b        test                bridge              local

... ...

启动第一个 docker,name 为 test01,并在容器中用 nc 命令模拟一个服务

$ docker run -it --rm --name test01 --network test busybox

/ # nc -l -p 1234

启动第二个 docker,name 为 test02,和 test01 在同一个网络上

$ docker run -it --rm --name test02 --network test busybox

/ # nc test01 1234

hello

由于在同一个网络上,可以通过 test01 这个名称直接连接另一个容器

启动第三个 docker,name 为 test03,使用默认的网络

$ docker run -it --rm --name test03 busybox

/ # nc test01 1234

nc: bad address 'test01'

由于 test03 和 test01 不在一个网络上,所以无法互通


选择订阅-通过 Docker 订阅在协作、安全性和支持之间找到完美的平衡!
在线客服
联系方式

热线电话

18221674630

上班时间

周一到周五

公司电话

18221674630

二维码
线
获取免费体验资格

提交后,我们将在3个小时内与您联系