一、Docker是什么?
Docker 依赖unix内核 运行在Linux上的容器不同于虚拟机,Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。 Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。
二、Docker的技术简介
(每个容器都单独分配计算机进程、root文件系统、IP地址、cpu、内存等资源)
Namespaces 命名空间
- PID(Process ID)进程隔离
- NET(Network)管理网络接口
- IPC(IntePrcess Communication)管理跨进程通信的访问
- MNT(Mount)挂载点(文件系统)
- UTS(Unix Timesharing System)隔离内核和版本标识
Unix Control groups 控制组
Docker 基于Control groups 分配计算机资源给各个容器,是一个通过联合加载技术形成的只读文件系统。
三、安装Docker(Ubuntu)
**方法一:*需要检查 Ubuntu 内核版本是否支持 Docker,官方已经将安装docker的过程写入一个shell脚本中,我们只需要下载并执行这个脚本即可
- 检查是否安装 curl (若安装可跳过)
1
| sudo apt-get install -y curl
|
- 获取脚本并安装(示例:Ubuntu的安装方式)
1
| curl -fsSL https://get.docker.com | sudo sh
|
方法二:命令行安装
- 如果之前安装过docker,执行下面命令删除
1 2
| apt-get remove docker docker-engine docker.io sudo apt-get update
|
- 安装必要的软件包以允许apt通过HTTPS使用存储库,具体如下:
1
| sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
|
- 添加GPG密钥,可以添加官方的和阿里的,我添加的阿里的,国内的快啊
1 2 3 4
| // 官方 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - // 阿里 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
|
添加完毕后可以执行以下命令验证:
1
| sudo apt-key fingerprint 0EBFCD88
|
正常情况下会输出如下内容,说明 Ok,继续:
1 2 3 4
| pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ 未知 ] Docker Release (CE deb) <docker@docker.com> sub rsa4096 2017-02-22 [S]
|
- 设定稳定仓储库,这一步我被坑了好久,具体参考 docker 配置仓储库时出错:无法安全地用该源进行更新,所以默认禁用该源,也可以不设置,不设置默认使用官方的,具体是:
deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable
同样可以用阿里 的镜像:设置命令如下:
1
| sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
|
*注意:*其中的lsb_release -cs相当于一个函数,直接获取Ubuntu下的最新版本,设置完毕再次执行
- 安装docker
1
| sudo apt-get -y install docker-ce
|
也可以指定想安装 的docker版本,执行如下命令命令查看有哪些版本
1
| apt-cache madison docker-ce
|
输出如下:
1 2 3 4
| docker-ce | 5:18.09.0~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages docker-ce | 18.06.1~ce~3-0~ubuntu | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages docker-ce | 18.06.0~ce~3-0~ubuntu | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages docker-ce | 18.03.1~ce~3-0~ubuntu | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
|
选择要安装的版本,执行
1
| sudo apt-get install -y docker-ce=<VERSION>
|
安装完成 后执行
如果正常输出说明安装成功
四、非root用户使用Docker
非root用户使用docker会异常卡顿,官方推荐了一种非root用户使用的方式
- 添加docker 用户组
- 将当前用户添加到用户组中
1
| sudo gpasswd -a '你的用户名' docker
|
- 重启 docker
1
| sudo service docker restart
|
- 运行 docker 命令
注意:需注销当前用户重新登录,不然会报错(FATA[0000])!
五、 容器的基本操作
1 2 3 4
| docker run IMAGE [COMMAND] [ARG..](启动命令格式) 例:docker run ubuntu echo 'hello world' root@wkaanig:~ hello world
|
1. 启动交互式命令(只执行一次)
1 2 3 4 5 6 7 8 9
| docker run -i-t IMAGE /bin/bash (启动交互式命令 -i --interactive 标准服务 -t --tty 打开tty终端) 例:docker run -i -t ubantu /bin/bash root@wkaanig:~ root@72328d172f8f:/ UID PID PPID C STIME TTY TIME CMD root 1 0 2 07:40 pts/0 00:00:00 /bin/bash root 10 1 0 07:40 pts/0 00:00:00 ps -ef root@72328d172f8f:/ exit
|
2. 查看容器
1 2 3 4 5 6
| docker ps [-a] [-l](-a 所有的容器 -l 最新的容器) docker inspect "你想查询的 CONTAINER ID" (查看详情) 示例:root@wkaanig:~ CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 81046a796b82 ubuntu "echo 'hello world'" 3 minutes ago Exited (0) 3 minutes ago dazzling_hugle 72328d172f8f ubuntu "/bin/bash" 4 minutes ago Exited
|
3. 自定义容器名
1 2
| docker run --name=自定义名 -i -t IMAGE /bin/bash 查询:docker inspect 自定义名
|
4. 重新启动停止的容器
5. 删除已停止的容器
小结
1 2 3 4 5 6
| docker run -i -t --name docker ps -a -l docker inspect docker start -i docker start -i docker rm
|
六、守护式容器
1. 以守护形式运行容器
1 2 3 4 5 6
| docker run -i -t IMAGE /bin/bash Ctrl+P Ctrl+Q (使容器后台运行) 示例:root@wkaanig:~ root@7b296d75cd4b:/ CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7b296d75cd4b ubuntu "/bin/bash" 15 seconds ago Up 14 seconds busy_boyd
|
2. 附加到运行中的容器(即将 docker 容器放置前台运行)
1
| docker attach 容器名(ID 或 Name)
|
3. 启动守护式容器(以后台的方式)
1 2 3 4 5 6
| docker run -d IMAGE [COMMAND] [ARG..] 示例:root@wkaanig:~ df0b3043010d986371a4a9d94fa72f28fddc4f69a38d89690078ced9cca528cb root@wkaanig:~ CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES df0b3043010d ubuntu "/bin/sh -c 'while t…" 10 seconds ago Up 9 seconds dc1
|
4. 查看容器的运行情况(即日志)
1 2 3 4 5 6 7 8
| docker logs [-f] [-t] [--tail] 容器名 -f --follows 跟踪 -t --timestamps 时间戳 --tail="all" 日志数量 示例: root@wkaanig:~ 2019-09-17T08:19:57.987090981Z hello word 2019-09-17T08:19:58.988018019Z hello word
|
5. 查看容器内进程
6. 在运行中的容器内启动新进程
1
| docker exec [-d] [-i] [-t] 容器名 [COMMAND] [ARG...]
|
7. 停止守护式容器
1 2
| docker stop 容器名 docker kill 容器名 (快速停止)
|
小结
1 2 3 4 5 6
| Ctrl+P Ctrl+Q docker run -d docker logs docker top docker exec docker stop/kill
|
最后更新时间:本文遵循CCBY-NC-SA4.0许可协议,本文链接:
http://blog.wkaanig.cn/post/5b3d2e5b.html