文章目录
Docker其实在几年前就比较火了,但是一直有其概念,没有系统学习过。这里就将学习过程中的笔记整理一下。
1. 概念
Dockek是一个能够把开发的应用程序自动部署到容器的开源引擎, 由Go语言编写,给予Apache License 2.0开源协议授权发行。
1.1 优点
- 提供了简单,轻量的建模方式
- 职责逻辑分离
- 快速、高效的开发生命周期
1.2 Docker核心组件
-
Docker客户端和服务端,也称Docker引擎
架构图如下:
-
Docker镜像
-
Registry
用来保存用户构建的镜像。它分公共和私有两种。 -
Docker容器
2. 安装
这里分系统平台,安装过程很简单,略。
3. 入门
假设Docker已安装完成。
3.1 查看Docker基本信息
查询Docker基本信息,执行 docker info 命令:
~ docker info
Client:
Debug Mode: false
Server:
Containers: 3
Running: 0
Paused: 0
Stopped: 3
Images: 1
Server Version: 19.03.13
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 4.19.76-linuxkit
Operating System: Docker Desktop
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.944GiB
Name: docker-desktop
ID: JNLA:MK5C:BZAN:VLG5:M2FB:7Z7P:5WUC:QVS4:SPBA:STXW:HS5R:XSXA
Docker Root Dir: /var/lib/docker
Debug Mode: false
HTTP Proxy: gateway.docker.internal:3128
HTTPS Proxy: gateway.docker.internal:3129
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
3.2 运行第一个容器
docker run -it ubuntu /bin/bash
docker run命令表示要运行一个docker容器
-i 参数保证容器STDIN开启
-t 告诉Docker为要创建的容器分配一个伪tty终端
这样,新建的容器才能提供一个交互式shell
执行完后,就能进入容器了:
我们就可以看到这个容器的Shell了。
3.3 查看容器列表
docker ps
// 查看正在运行的容器列表
docker ps -a
// 查看所有的容器列表(包括已经停止运行的容器)
docker inspect [容器名称|容器ID]
// 详情
~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a9b94ff7c4d ubuntu "/bin/bash" 9 minutes ago Exited (0) 2 seconds ago practical_ritchie
b6ad6a2f8235 ubuntu "/bin/bash" 14 minutes ago Exited (127) 9 minutes ago angry_fermi
1c397efd5e7a ubuntu "/bin/bash" 42 minutes ago Exited (0) 16 minutes ago determined_fermat
47dbc38c7c57 ubuntu "/bin/bash" 45 minutes ago Exited (0) 45 minutes ago mystifying_payne
ac1d490e4312 ubuntu "/bin/bash" 46 minutes ago Exited (0) 45 minutes ago stupefied_almeida
图中可以看到,每个容器是有名字的,如果没有特意指定,则系统默认给出。
有三种方式可以唯一指定容器:
- UUID
- 长UUID
- 名称
3.4 容器命名
docker run --name my_container -it ubuntu /bin/bash
可以看到,多增加一个–name参数即可。
关于名称的规范需符合如下正则:
[a-zA-Z0-9_.-]
3.5 重启容器
docker start my_container
// 根据容器名称启动
docker start 3a9b94ff7c4d
// 根据容器ID启动
3.6 停止容器
docker stop my_container
// 根据容器名称停止
docker stop 3a9b94ff7c4d
// 根据容器ID停止
3.7 删除容器
docker rm my_container
// 根据容器名称删除
docker rm 3a9b94ff7c4d
// 根据容器ID删除
该命令执行成功前提是:容器已停止
删除所有容器:
docker rm \
docker ps -a -q``
-q参数表示只返回容器ID
3.8 创建守护容器
docker run --name my_daemon -d ubuntu /bin/bash -c "while true; do echo 'hello world'; sleep 10; done"
-d参数,Docker会将容器放到后台运行。
3.9 获取守护容器日志
docker logs my_daemon
docker logs -rt my_daemon
3.10 查看守护式容器进程
docker top my_daemon
该命令执行后,可以看到容器内所有进程的用户及进程ID