0%

简单了解Docker

最近工作上碰到了docker了,之前买了书却一直没开始学习,这次借机会好好整理下了。。。网上docker教程很多,但是对于一些的概念以及运行逻辑来说,还是得好好了解下 #### Docker基本概念

Docker使用C/S结构,即客户端/服务器体系结构。Docker客户端与Docker服务器进行交互,Docker服务端负责构建、运行和分发Docker镜像。Docker客户端和服务端可以运行在一台机器上,也可以通过RESTful、stock或网络接口与远程 Docker服务端进行通信

Docker Client,即docker客户端,是用户与docker交互 主要方式,一般我们常用的docker命令就相当于docker client

Docker daemon,即服务器组件或者守护进程(有时也称为docker引擎),是Docker最核心的后台进程,与客户端即用户进行交互并返回结果

Docker Daemon 可以认为是通过 Docker Server 模块接受 Docker Client 的请求,并在 Engine 中处理请求,然后根据请求类型,创建出指定的 Job 并运行。 Docker Daemon 运行在 Docker host 上,负责创建、运行、监控容器,构建、存储镜像

镜像 image,是基于联合(Union)文件系统的一种层式的结构,由一系列指令构建出来的

仓库 Repository,docker用仓库来保存用户构建的镜像,默认的仓库是docker的Docker Hub;当然还有私有的仓库

一个Docker Registry(类似于Github)中可以包含多个仓库 (Repository),每个仓库可以包含多个标签(Tag),每个标签对应着一个镜像。所以说,镜像仓库是 Docker用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。

容器 Container,容器是基于镜像启动起来的,容器中可以运行一个或多个进程。

容器 = 镜像 + 读写层

对于Docker的架构,可参照这可能是最为详细的Docker入门吐血总结,个人觉得写的比书还详细点~

apt源安装

删除系统中的老版本docker

sudo apt-get remove docker docker-engine docker.io containerd runc

安装docker的apt源相关包

sudo apt update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

添加docker仓库的GPG密钥,并检查其是否正确

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88

设置apt源的docker的软件库版本为稳定版,lsb_release -cs查看ubuntu的发行版本,我们也可以将源更换为中科大源

#sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

更新apt源,并安装CE版docker

sudo apt update
sudo apt-get install docker-ce docker-ce-cli containerd.io

测试运行(当镜像run运行成功后,这个运行的镜像就是一个 Docker容器,容器是可以被启动、停止、删除的,但不会影响 Docker镜像本身)

docker -v
sudo docker run hello-world

开机自启\启动docker\查看守护进程状态

sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker

设置个人用户运行docker

sudo groupadd docker
sudo usermod -aG docker anlan

卸载docker

sudo apt-get purge docker-ce
# 清理docker相关的文件
sudo rm -rf /var/lib/docker

Install static binaries

在网址https://download.docker.com/linux/static/stable/下载docker二进制文件,我选择的是x86_64 / amd64,并解压

tar zxvf docker-19.03.1.tgz

将文件放到系统执行路径下,如/usr/bin/

sudo cp docker/* /usr/bin/

启动Docker守护进程

sudo dockerd &
# sudo docker –d

测试查看docker是否正常运行

sudo docker info

如果出现Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.报错,首先用dockerd命令查错,然后再重启下(可能有用)

sudo dockerd --debug

运行docker

首先来试着创建一个交互式运行的容器,如基于ubuntu基础镜像启动一个名为test的容器,输入exit退出(一般来说退出后默认停止docker)

sudo docker run --name test -i -t ubuntu /bin/bash

列出所有容器,-a参数列出运行和停止的所有容器

sudo docker ps -a

重启上述停止的容器,看下会否启动,然后返回运行的容器上,如果再退出的话则又变成停止状态了

sudo docker start test
sudo docker ps

如果想退出容器但不关闭容器,则用Ctrl+P+Q,如果退出了的话,可以用docker restart或者docker attach;如果在创建时加上--restart=always参数,则无论怎么退出容器都会重启;如果想让

如果想创建一个长期运行的容器,如守护式容器,需要加上-d参数

sudo docker run --name test2 -i -t -d ubuntu /bin/bash
sudo docker ps

查看容器的日记,-t参数会加上每条日记的时间

sudo docker logs -ft test2

查看容器里的进程

sudo docker top test2

另外还可以指定容器内运行的命令,比如指定一个shell交互命令。PS.如果再用Ctrl+D退出的话,容器不会随之关闭了

sudo docker exec -t -i test2 /bin/bash

删除容器/删除所有容器

sudo docker rm test2
sudo docker rm `sudo docker ps -a -q`

参考资料:
https://docs.docker.com/install/linux/docker-ce/ubuntu/
这可能是最为详细的Docker入门吐血总结
《第一本Docker书》

本文出自于http://www.bioinfo-scrounger.com转载请注明出处