目录
理论
基础操作
在Ubuntu上配置Docker
踩坑
理论
1.容器的概念:容器是对应用程序及其依赖关系的封装,可以看成是一个轻量级的虚拟机环境。
- 容器能与主机的操作系统共享资源
- 运行容器开销小,可以大数量多开
- 容器具有强可移植性,换个电脑也能跑
- 虚拟机的目的是要完整地模拟另一个环
境;而容器的目的则是使应用程序能够移植,并把所有依赖关系包含进去(这一点有点像yum)
2.Docker利用的是Linux的容器技术,Docker 平台拥有两个不同部分
- 负责创建与运行容器的Docker引擎
- 用来发布容器的云服务Docker Hub
3.Docker工具:
- 集群管理工具Swarm
- 用于处理容器的图形用户界面Kitematic,
- 部署Docker主机的命令行工具Machine。
4.容器使软件应用程序与操作系统脱钩,从而为用户提供了一个干净而最小的Linux环境,同时在一个或多个隔离的“容器”中运行其他所有内容。容器的目的是启动一组有限的应用程序或服务(通常称为微服务),并使它们在独立的沙盒环境中运行
5.docker的组成
- image(镜像)相当于可执行程序
- 一个程序需要代码经过编译来生成,dockerfile就是源代码,docker本体起到编译器的作用
- 镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层
- 删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像
- container(容器)相当于一个进程
- Docker Registry就是docker的代码仓库
- 分为官方的公有库和自己搭建的私有库
6.docker的流程
- 例如运行一条docker run -p 3306:3306 –name mysql -d mysql的命令
- docker客户端执行docker run命令
- docker daemon通过graphdriver去Graph中拉取最新的mysql镜像
- docker daemon通过networkdriver建立端口映射
- docker daemon通过execdriver启动容器
- 注:docker对系统调用的操作由libcontainer实现,可以单独借此来操作防火墙、namespace等
基础操作
1.运行第一个镜像
1 | docker run debian echo "Hello World" |
2.在镜像中使用shell
1 | docker run -i -t debian /bin/bash |
3.用指定主机名“CONTAINER”启动镜像
1 | docker run -h CONTAINER -i -t debian /bin/bash |
4.查看正在运行的容器信息,会出现容器id和名称(这两个字段都可以用作inspect的参数)
1 | doker ps |
5.显示某容器的详细信息
1 | docker inspect xx |
6.显示某容器哪些文件被改动过
1 | docker diff xx |
7.显示容器中发生的一切操作记录
1 | docker logs xx |
8.删除容器
1 | docker rm xx |
9.从远程服务器拉取镜像
1 | docker pull nginx |
在Ubuntu上配置Docker
1.安装Docker
- 更新apt源索引
1 | sudo apt-get update |
- 允许apt通过HTTPS使用仓库
1 | sudo apt-get install \ |
- 添加Docker官方的GPG密钥
1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 设置Docker稳定版仓库
1
2
3
4sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable" - 再一次更新apt源索引
1
sudo apt-get update
- 下载安装Docker社区版
1
sudo apt-get install docker-ce
2.检查Docker是否配置正确
- 检查Docker CE是否安装正确若出现下述内容则表示安装正确
1
sudo docker run hello-world
1
2
3
4
5
6
7
8Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
......
For more examples and ideas, visit:
https://docs.docker.com/get-started/ - 检查Docker是否可用若只出现Client配置,则表示权限不正确
1
docker version
需输入1
2
3
4
5
6
7
8
9
10Client: Docker Engine - Community
Version: 20.10.7
API version: 1.41
Go version: go1.13.15
Git commit: f0df350
Built: Wed Jun 2 11:56:38 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version: dial unix /var/run/docker.sock: connect: permission denied之后显示以下内容,则表示Docker安装正确并可用1
sudo chmod a+rw /var/run/docker.sock
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
28Client: Docker Engine - Community
Version: 20.10.7
API version: 1.41
Go version: go1.13.15
Git commit: f0df350
Built: Wed Jun 2 11:56:38 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.7
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: b0f5bc3
Built: Wed Jun 2 11:54:50 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.6
GitCommit: d71fcd7d8303cbf684402823e425e9dd2e99285d
runc:
Version: 1.0.0-rc95
GitCommit: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
docker-init:
Version: 0.19.0
GitCommit: de40ad0
踩坑
1.win系统启动docker桌面版失败就去把AppData里面的docker文件夹重命名为docker_backup,再重新启动即可