docker学习笔记

docker简介

  • Docker是一个新的容器化的技术,容器有效的将单个操作系统管理的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求。
  • Docker 容器本质上是宿主机上的一个进程。Docker 通过 namespace 实现了资源隔离,通过 cgroups 实现了资源的限制,通过写时复制机制(copy-on-write)实现了高效的文件操作。
  • Docker有五个命名空间:进程、网络、挂载、宿主和共享内存,为了隔离有问题的应用,Docker运用Namespace将进程隔离,为进程或进程组创建已隔离的运行空间,为进程提供不同的命名空间视图。这样,每一个隔离出来的进程组,对外就表现为一个container(容器)。

镜像和容器

  • Image: 镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

  • Container:容器是镜像的运行时实例 - 实际执行时镜像会在内存中变成什么。默认情况下,它完全独立于主机环境运行,仅在配置为访问主机文件和端口的情况下才执行此操作。

  • 容器 = 镜像 + 读写层

    容器可以获取本机访问,每个容器都在独立进程中运行,占用的内存不超过任何其他可执行文件。

image-20200322154938724

image-20200322155027373

Docker的使用

启动和放入启动项

1
2
3
4
5
6
7
#centos7.0版本
systemctl start docker
systemctl enable docker

#兼容老版本
service docker start
chkconfig docker on

image相关操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
docker search [镜像]      #搜索镜像
docker pull [镜像] #下载镜像
docker run -p 4000:80 username/repository:tag #从远程镜像仓库中拉取并运行镜像

sudo docker pull ubuntu:12.04 等同于
docker pull registry.hub.docker.com/ubuntu:12.04

docker push [镜像] #发布镜像
docker rmi [镜像] #删除镜像
docker images #查看本地镜像(列目录)
docker images -q #只显示镜像ID
docker history [镜像] #历史镜像
docker tag [镜像] username/repository:tag #标记镜像

docker rmi $(docker images -q) #删除所有停止的镜像
docker rmi -f $(docker images -q) #强制删除所有的镜像

容器相关操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#创建容器
docker run [镜像] /bin/echo hello world #输出hello world
docker run -i -t [镜像] /bin/bash #交互式进入容器 #-i: 以交互模式运行容器 -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
docker run [镜像] apt-get install -y app_name #在容器安装新的程序

docker exec -it kali /bin/bash #进入容器
docker run -it -d kali #启动容器,后台运行 #-d: 后台运行容器,并返回容器ID;
docker run -it -p 53:53 kali #启动容器的时候可以映射端口 #-p: 端口映射,格式为:主机(宿主)端口:容器端口

#进入交互式界面
进入容器:
sudo docker ps -a
sudo docker exec -it [容器ID] /bin/bash

#查看容器
docker ps #列出当前运行的容器
docker ps -a #列出所有的容器
docker ps -l #列出最近一次启动的容器
docker ps -a -q #查看所有的容器ID

#容器操作
docker inspect [容器名字]/ID #显示容器信息
docker start [容器名字]/ID #启动容器
docker stop [容器名字]/ID #停止容器
docker kill [容器名字]/ID #杀死容器
docker restart [容器名字]/ID #重新启动容器
docker attach [容器名字]/ID #进入容器
docker logs [容器名字]/ID #查看容器日志
docker diff [容器名字]/ID #查看容器修改操作
docker top [容器名字]/ID #显示容器进程信息
docker cp ID:/path to_path #从容器中拷贝数据到本地
docker cp [容器名字]:/path to_path #从容器中拷贝数据到本地

#删除容器
docker rm [容器]/ID #删除容器
docker rm $(docker ps -a -q) #删除所有停止的容器
docker rm -f $(docker ps -a -q) #强制删除所有的容器

参考链接:

https://www.smi1e.top/docker-%e7%ac%94%e8%ae%b0/