最近工作上碰到了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转载请注明出处