Docker(小白刚进门)

本文仅对所学知识所做的笔记,如果能给你带来帮助,我也会感到非常幸运

Docker简介

什么是容器?

  • 一种虚拟化的方案
  • 操作系统级别的虚拟化
  • 只能运行相同或相似内核的操作系统
  • 依赖于Linux内核特性:NamespacesCgroups(Control Group)

docker启动的Linux没有ifconfig ifconfig docker0_ubuntu

什么是Docker?

Docker的目标

  • 提供简单轻量的建模方式
  • 职责的逻辑分离
  • 快速高效的开发生命周期
  • 鼓励使用面向服务的架构

Docker的使用场景

  • 使用Docker容器开发、测试、部署服务
  • 创建隔离的运行环境
  • 搭建测试环境
  • 构建多用户的平台即服务(PaaS)基础设施
  • 提供软件即服务(SaaS)应用程序
  • 高性能、超大规模的宿主机部署

Docker的基本组成

  • Docker Client:客户端
  • Docker Daemon:守护进程
  • Docker Image:镜像
  • Docker Container:容器
  • Docker Registry:仓库:提供docker镜像的存储服务(与后面的镜像仓库REPOSITORY不同)

Docker容器相关技术简介

Namespaces命名空间

  • PID(Process ID):进程隔离
  • NET(Network):管理网络接口
  • IPC(InterProcess Communication):管理跨进程通信的访问
  • MNT(Mount):管理挂载点
  • UTS(Unix Timesharing System):隔离内核和版本标识

Control groups控制组

  • 资源限制
  • 优先级设定
  • 资源计量
  • 资源控制

Docker容器的能力

  • 文件系统隔离:每个容器都有自己的root文件系统
  • 进程隔离:每个容器都运行在自己的进程环境中
  • 网络隔离:容器间的虚拟网络接口和IP地址都是分开的
  • 资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每个Docker容器

安装Docker

Ubuntu

安装前检查
  • 内核版本
uname -a
  • 检查Device Mapper
ls -l /sys/class/misc/device-mapper
安装方式
  • 安装Ubuntu维护的版本
  • 安装Docker维护的版本(推荐
安装Docker维护的版本

以下都是使用root用户操作,非root需要在命令前加sudo

  1. 检查APTHTTPS支持,查看/usr/lib/apt/methods/https文件是否存在,如果不存在,运行安装命令
apt-get update
sudo apt-get install \
   apt-transport-https \
   ca-certificates \
   curl \
   gnupg-agent \
   software-properties-common
  1. 添加仓库的key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  1. 设置稳定版仓库
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) \
  stable"
  1. 安装docker-ce
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io
  1. 查看docker是否安装好了
docker version
  1. 设置一个用户组,因为普通用户每次都要在命令前加sudo,root则不用加。设置完后普通用户使用docker命令也可以不用加sudo
#添加组的命令,格式如下:
groupadd [选项] 组名
选项:
-g GID:指定组ID
groupadd tg:添加组tg
#例子
eg:groupadd docker
#添加用户到组里,或者把用户从组里删除,命令格式如下:
gpasswd 选项 组名
选项:
-a 用户名:把用户加入组
-d 用户名:把用户从组中删除
#例子:添加
eg:gpasswd -a root docker
#例子:删除
eg:gpasswd -d root docker
  • 如果添加完组还不能使用,可以试试注销账号重新登录或者重启系统。

Docker容器

容器的基本操作

命令
#在新容器中执行命令
#(一次性的)运行完这条命令,容器就关闭
docker run IMAGE [COMMAND] [ARG...]
#(交互式的),exit后容器就关闭
docker run -i -t IMAGE /bin/bash

#查看容器,-a是指列出所有容器,-l是指列出最新创建的容器
docker ps [-a][-l]
eg:
	docker ps:#不带选项,输出的是正在运行的容器
	docker ps -a:#输出的是所有的容器
	docker ps -a:#输出的是最新创建的容器
	
#查看容器详细信息
docker inspect 容器名 或 容器id
eg:
	docker inspect 53ccbc3188b4
	
#自定义容器名
docker run --name=自定义名 -i -t IMAGE /bin/bash

#重新启动停止的容器,-i表示重新启动已经停止的容器
docker start [-i] 容器名

#删除停止的容器,不能删除正在运行的
docker rm 容器名

守护式容器

  • 能够长期运行
  • 没有交互式会话
  • 适合运行应用程序和服务
命令
#启动交互式容器,然后组合键退出,可以以守护形式运行容器
docker run -i -t IMAGE /bin/bash
Ctrl+P Ctrl+Q

#附加到运行中的容器
docker attach 容器名

#启动守护式容器
docker run -d 镜像名 [COMMAND][ARG...]

#查看容器日志
docker logs [-f][-t][--tail] 容器名
	-f	--follows=true | false #默认为false,是否一直跟踪日志
	-t	--timestamps=true | false #默认为false,返回时是否加上时间戳
	--tail= "all",#返回结尾处多少数量的日志,默认所有都返回
eg:docker logs -tf --tail 0 容器名

#查看容器内进程
docker top 容器名
	
#在运行中的容器内启动新进程
docker exec [-d][-i][-t] 容器名 [COMMAND][ARG...]

#停止守护式容器
docker stop 容器名	#发送一个命令给容器,等待容器停止
docker kill 容器名	#直接杀死容器

在容器中部署静态网站

设置容器的端口映射
#容器端口映射
run[-P][-p]


#大写P
-P:--publish-all=true | false	#默认为false,true的意思是对容器暴露的所有端口进行映射
eg:docker run -P -i -t ubuntu /bin/bash


#小写p,包括了4种格式
-p:--publish=[]
#1.只指定容器的端口,主机端口随机映射
#格式:containerPort
eg:docker run -p 80 -i -t ubuntu /bin/bash
#2.同时指定主机端口和容器端口
#格式:hostPort:containerPort
eg:docker run -p 8080:80 -i -t ubuntu /bin/bash
#3.同时指定ip和容器端口
#格式:ip::containerPort
eg:docker run -p 0.0.0.0:80 -i -t ubuntu /bin/bash
#4.同时指定ip和主机端口和容器端口
#格式:ip:hostPort:containerPort
eg:docker run -p 0.0.0.0:8080:80 -i -t ubuntu /bin/bash

#查看容器映射到的主机端口
docker port 容器名
eg:docker port web

停掉正在运行的容器,再次启动的时候,容器的ip和端口,以及映射的主机端口都会改变

#安装nginx
apt-get install -y nginx
#查看nginx安装在哪
whereis nginx
#修改sites-enabled里的default配置文件,将自己写的网页写到配置文件里,就可以访问
#静态网页默认存放位置:/var/www/html

#安装vim
apt-get install -y vim

查看和删除镜像

命令

#查看docker镜像存储位置等信息
docker info

#列出镜像:不带参数显示的是,在docker中已经安装的镜像
docker images [OPTSIONS] [REPOSITORY]
	-a:-all=false	#显示所有镜像,默认不显示中间层镜像
	-f:--filter=[]	#过滤
	--no-trunc=false	#不使用截断方式显示唯一id
	-q:--quiet=false	#只显示镜像的唯一id

#返回结果列解释,同个镜像可以有不同标签
REPOSITORY	         TAG	     IMAGE ID         CREATED          VIRTUAL SIZE
仓库				  标签		镜像唯一id		镜像创建时间			镜像大小

#用-a选项显示出的镜像中,没有仓库名和标签名的是中间层镜像

#查看镜像详细信息
docker inspect [OPTIONS] COTAINER|IMAGE [CONTAINER|IMAGE...]
	-f:--format=""
eg:docker inspect ubuntu:14.04	#用镜像的仓库名:TAG名查看


#删除镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]
	-f:--force=false	#Force removal of the image,强制删除镜像
	--no-prune=false	 #Do not delete untagged parents,保留被删除镜像中,被打标签的父镜像
	
eg:docker rmi $(docker images -q ubuntu) 	#删除所有镜像
eg:docker rmi ubuntu:14.04 ubuntu:18.04		#删除多个镜像,中间用空格分开

获取和推送镜像

查找镜像

  1. 通过官网
Docker Hub
https://registry.hub.docker.com
  1. 通过命令
docker search [OPTIONS] TERM
	 -f, --filter filter    #Filter output based on conditions provided
      --format string   	#Pretty-print search using a Go template
      --limit int       	#Max number of search results (default 25)
      --no-trunc        	#Don't truncate output

拉取镜像

docker pull [OPTIONS] NAME [:TAG]
	-a, --all-tags=false	#Download all tagged images in the repository
eg:docker pull ubuntu:14.04

修改镜像源

使用 --registry-mirror 选项
	1.修改:/etc/default/docker
	2.添加:DOCKER_OPTS="--registry-mirror=http://MIRROR-ADDR" https://www.daocloud.io

国内Docker镜像仓库名称

链接

Docker官方中国区

https://registry.docker-cn.com

网易

http://hub-mirror.c.163.com

中国科学技术大学

https://docker.mirrors.ustc.edu.cn

阿里云

https://<你的ID>.mirror.aliyuncs.com

步骤
  1. 修改/etc/docker/daemon.json文件,没有可以自己建一个
vim /etc/docker/daemon.json
  1. 写入json数据
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}
  1. 重启Docker使配置生效
systemctl restart docker.service

推送镜像

docker push NAME[:TAG]
#详细请见阿里云镜像推送

构建镜像

  • 保存对容器的修改,并再次使用
  • 自定义镜像的能力
  • 以软件的形式打包并分发服务及其运行环境

方式

  1. docker commit:通过容器构建
  2. docker build:通过Dockerfile文件构建

通过容器构建

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
	-a,--author=""	#Author
					eg:"John Hannibal Smith hannibal@a-team.com"
	-m,--message=""	#Commit message
	-p,--pause=true	#Pause container during commit

通过Dockerfile构建(常用)

  1. 创建Dockerfile
  2. 使用$docker build命令
例子
#创建第一个Dockerfile
vim Dockerfile

#下面是文件内容

#First Dockerfile
FROM ubuntu:14.04
MAINTAINER dormancypress	"dormancypress@outlook.com"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
docker build [OPTIONS] PATH | URL | -
	--force-rm=false
	--no-cache=false
	--pull=false
	-q,--quiet=false
	--rm=true
	-t,--tag=""		#构建出来文件的名字
eg:docker build -t abc/test01 .	#.表示当前目录下,PATH指的是dockfile的文件路径

CS模式

docker启动的Linux没有ifconfig ifconfig docker0_ubuntu_02

docker启动的Linux没有ifconfig ifconfig docker0_ubuntu_03

Docker守护进程配置和操作

查看守护进程

ps -ef | grep docker

#使用service命令管理
service docker status	#查看docker守护进程状态
service docker start	#启动docker守护进程
service docker stop		#停止docker守护进程
service docker restart	#重启docker守护进程

docker启动配置文件

/etc/default/docker

Docker远程访问

服务端

#修改docker守护进程启动选项
-H	tcp://host:port
	unix:///path/to/socket,
	fd://* or fd://socketfd
#默认配置
-H unix:///var/run/docker.sock

修改/etc/default/docker

vim /etc/default/docker
#添加下面这个选项,2375为端口
DOCKER_OPTS=" -H tcp://0.0.0.0:2375 "

如果修改之后没有生效,那么需要修改docker.service文件,路径在/lib/systemd/system/docker.service

参考自:

EnvironmentFile=-/etc/default/docker	#-表示ignore error
#这样就可以使用/etc/default/docker 里定义的DOCKER_OPTS参数
ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS

docker启动的Linux没有ifconfig ifconfig docker0_Docker_04

完了之后用另一台主机访问

#192.168.73.128是上面那台修改了docker配置文件的主机ip
curl http://192.168.73.128:2375/info

docker启动的Linux没有ifconfig ifconfig docker0_docker_05

客户端

#使用Docker客户端命令选项
-H	tcp://host:port
	unix:///path/to/socket,
	fd://* or fd://socketfd
#客户端默认配置
-H unix:///var/run/docker.sock

eg:docker -H tcp://192.168.73.128:2375 info
#使用环境变量DOCKER_HOST
export DOCKER_HOST="tcp://192.168.73.128:2375"

#再使用docker命令访问的时候,就会访问上面ip地址的docker服务
docker info

#使用完之后,置空,则会使用原默认的访问方式
export DOCKER_HOST=""

docker启动的Linux没有ifconfig ifconfig docker0_docker_06

Dockerfile指令

#Comment
INSTRUCTION argument

FROM

  • 已经存在的镜像
  • 基础镜像
  • 必须是第一条非注释指令
#格式
FROM <image>
FROM <image>:<tag>

MAINTAINER

指定镜像的作者信息,包含镜像的所有者和联系方式

#格式
MAINTAINER <name>

RUN

指定当前镜像中运行的命令(镜像构建过程中运行的命令

RUN <command>	#shell模式
	/bin/sh -c command
	eg:RUN echo hello
RUN ["executable","param1","param2"]	#exec模式
	RUN ["/bin/bash", "-c", "echo hello"]

EXPOSE

#指定运行该镜像的容器使用的端口
EXPOSE <port> [<port>...]
	
eg:docker run -p 80 -d dormancypress/df_test1 nginx -g "daemon off;"

CMD

指定当前镜像中运行的默认命令(可以被run时指定的指令覆盖)(容器运行时运行的命令

CMD["executable", "param1", "param2"]	#exec模式
CMD command param1 param2	#shell模式
CMD["param1", "param2"]		#作为ENTRYPOINT指令的默认参数

ENTERYPOINT

ENTRYPOINT["executable", "param1", "param2"]	#exec模式
ENTRYPOINT command param1 param2	#shell模式

ADD

将文件或目录复制到dockfile构建的镜像中

ADD <src>...<dest>
ADD ["<src>"..."<dest>"]	#适用于文件路径中有空格的情况

COPY

将文件或目录复制到dockfile构建的镜像中

COPY <src>...<dest>
COPY["<src>"..."<dest>"]	#适用于文件路径中有空格的情况

ADD vs COPY

ADD包含类似tar的解压功能

如果单纯复制文件,Docker推荐使用COPY

VOLUME

VOLUME["/data"]

WORKDIR

创建目录(要使用绝对路径方式),其他指令会在该命令创建出来的目录下执行

WORKDIR /path/to/workdir

ENV

设置环境变量

ENV <key><value>
ENV <key>=<value>...

USER

指定容器以什么用户去运行

USER nginx	#容器会以nginx的身份来运行

#还可以指定用户名或者用户组方式,不指定的话默认用root用户
USER user
USER uid
USER user:group
USER uid:gid
USER user:gid
USER uid:group

ONBUILD

镜像触发器,当一个镜像被其他镜像作为基础镜像时执行,会在构建过程中插入指令

ONBUILD [INSTRUCTION]

Dockerfile构建过程

  • 从基础镜像运行一个容器
  • 执行一条指令,对容器做出修改
  • 执行类似docker commit的操作,提交一个新的镜像层
  • 再基于刚提交的镜像运行一个新容器
  • 执行Dockerfile中的下一条指令,直至所有指令执行完毕
  • 可以使用中间层镜像进行容器构建的调试

构建缓存:同一镜像第二次构建时默认会使用缓存,加快构建速度

不使用构建缓存:可以使用如下命令:

docker build --no-cache

查看镜像构建过程

docker history 镜像名

Docker容器的网络连接

使用ifconfig看到的docker0,是Linux的虚拟网桥

Linux虚拟网桥的特点:

  • 可以设置IP地址
  • 相当于拥有一个隐藏的虚拟网卡

docker启动的Linux没有ifconfig ifconfig docker0_docker_07

每次运行一个容器,docker都会分配一个ipmac地址给容器,并映射网络到docker0

如果想修改docker0的地址,可以使用如下命令:

#例子
ifconfig docker0 192.168.200.1 netmask 255.255.255.0

自定义虚拟网桥

#添加虚拟网桥,brctl需要安装bridge-utils包
brctl addbr br0
ifconfig br0 192.168.100.1 netmask 255.255.255.0
#更改docker守护进程的启动配置
/etc/default/docker	中添加DOCKER_OPS值
-b=br0

Docker容器的互联

  • 允许所有容器互联
  • 拒绝容器间互联
  • 允许特定容器间的连接

构建镜像用的Dockfile

FROM ubuntu:14.04
RUN apt-get install -y ping
RUN apt-get update
RUN apt-get install -y nginx
RUN apt-get install -y curl
EXPOSE 80
CMD /bin/bash

因为每次重新启动容器,容器的ip都会发生改变,用ip来访问很不方便,所以可以给容器起一个别名,访问的时候使用别名访问。重新启动容器后,别名会随ip地址的改变,改变自身映射的ip。

docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE] [COMMOND]
eg:docker run -it --name cct3 --link=cct1:website dormancypress/cct

阻断容器间连接

默认是所有容器间都能互相访问:--icc=true

修改Docker守护进程启动选项(/etc/default/docker):--icc=false

允许特定容器间连接

#步骤:
#1.Docker守护进程启动选项(/etc/default/docker)
--icc=false --iptables=true

#2.运行的时候使用--link
--link

数据卷

  • 数据卷(Data Volume)是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问。
  • 数据卷的设计目的,在于数据的永久化,它完全独立于容器的生存周期,因此,Docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理。

docker启动的Linux没有ifconfig ifconfig docker0_docker_08

数据卷(Data Volume)的特点

  • 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中
  • 数据卷可以在容器之间共享和重用
  • 可以对数据卷里的内容直接进行修改
  • 数据卷的变化不会影响镜像的更新
  • 卷会一直存在,即使挂载数据卷的容器已经删除

添加数据卷

#docker run -v 本机目录:在容器中访问的目录 镜像部分指令
docker run -v ~/container_data:/data -it ubuntu /bin/bash

#可以用inspect命令查看容器详细信息,看看容器是否挂载了数据卷
docker inspect xxx

为数据卷添加访问权限

#docker run -v 本机目录:容器中访问目录:ro -it ubuntu /bin/bash	ro指的是只读
docker run -v ~/datavolume:/data:ro -it ubuntu /bin/bash

使用Dockfile创建包含数据卷的镜像

此方式不能实现数据共享

VOLUME["/data"]

数据卷容器

命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫数据卷容器。

docker启动的Linux没有ifconfig ifconfig docker0_Docker_09

挂载数据卷容器

docker run --volumes-from [CONTAINER NAME]

数据备份

#方式一
docker run --volumes-from [container name] -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar [container data volume]

#docker run --volumes-from 数据存放的镜像 -v 备份数据存放目录:容器数据存放目录 --name 本次运行的镜像名 本次运行的基础镜像 tar cvf 备份数据的存放位置和文件名(.tar结尾) 数据存放镜像中文件名/目录名
eg:docker run --volumes-from dvt5 -v ~/backup:/backup --name dvt10 ubuntu tar cvf /backup/dvt5.tar /datavolume1

docker启动的Linux没有ifconfig ifconfig docker0_ubuntu_10

备份数据还原

#具体参数含义参考数据备份
docker run --volumes-from [container name] -v$(pwd):/backup ubuntu tar xvf /backup/backup.tar [container data volume]

Docker跨主机连接

  • 使用网桥实现跨主机容器连接(略)
  • 使用Open vSwitch实现跨主机容器连接(略)
  • 使用weave实现跨主机容器连接

Open vSwitch

Open vSwitch是一个高质量的,多层虚拟交换机。通过GRE隧道使不同主机的容器可以连接。

GRE:通用路由协议封装

隧道技术(Tunneling) 是一种通过使用 互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。新的帧头提供路由信息,以便通过互联网传递被封装的负载数据。

weave

weave用于建立一个虚拟网络,用于将运行在不同主机的Docker容器连接起来

  • 安装weave
#下载weave
wget -O /usr/bin/weave https://github.com/weaveworks/weave/releases/download/latest_release/weave
#修改权限,使可执行
chmod a+x /usr/bin/weave
  • 启动weave
#启动的时候会去下载镜像
weave launch

#另一台主机运行的时候加上前一台主机的ip
weave launch 192.168.73.128
  • 连接不同主机
  • 通过weave启动容器
#先创建一个容器,c2拿到的是命令执行的返回值,也就是容器的id,192.168.1.2是指定的一个ip地址,也就是容器等下运行的时候的ip地址,而原有的docker0网桥分配的地址还在容器中

c2=$(weave run 192.168.1.2/24 -it ubuntu /bin/bash)	#这个weave run命令在weave2.0里已经删了,所以下面直接用docker启动一个容器(已存在的也行)
#我这里是重新启动了一个停掉的容器
docker restart web

#也可以启动一个新的容器,如下:
docker run --name=自定义名 -it 镜像名 /bin/bash

#然后用weave给容器设置虚拟ip地址,web是指上面启动的时候的自定义名,用唯一id也可以,这一步设置好后,容器就会用这个虚拟ip运行
weave attach 192.168.1.2/24 web

#用docker进入到容器里,执行操作
docker attach web 

#下面是同样的操作
#前一台主机启动容器,指定一个和上面192.168.1.2/24同一网段的地址,该地址就作为容器启动后运行时的ip地址
docker run --name=web -it ubuntu /bin/bash
weave attach 192.168.1.10/24 web

#进入容器里
docker attch web	

#ping
使用ping去ping另一个容器的ip可以ping通,说明两个容器可以连接

遇到的问题

ubuntu中删除键和上下左右不好使

#ubuntu中删除键和上下左右不好使
apt-get remove vim-common
apt-get install vim-gtk

修改ubuntu镜像源

#修改该文件,将原来的源注释掉,替换成国内的镜像源(任选一个)
vim /etc/apt/sources.list
#完毕之后更新源
apt-get update

#阿里镜像源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
#清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
#网易源
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
#中科大源
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
#浙大源
deb http://mirrors.zju.edu.cn/ubuntu/ trusty main multiverse restricted universe
deb http://mirrors.zju.edu.cn/ubuntu/ trusty-backports main multiverse restricted universe
deb http://mirrors.zju.edu.cn/ubuntu/ trusty-proposed main multiverse restricted universe
deb http://mirrors.zju.edu.cn/ubuntu/ trusty-security main multiverse restricted universe
deb http://mirrors.zju.edu.cn/ubuntu/ trusty-updates main multiverse restricted universe
deb-src http://mirrors.zju.edu.cn/ubuntu/ trusty main multiverse restricted universe
deb-src http://mirrors.zju.edu.cn/ubuntu/ trusty-backports main multiverse restricted universe
deb-src http://mirrors.zju.edu.cn/ubuntu/ trusty-proposed main multiverse restricted universe
deb-src http://mirrors.zju.edu.cn/ubuntu/ trusty-security main multiverse restricted universe
deb-src http://mirrors.zju.edu.cn/ubuntu/ trusty-updates main multiverse restricted universe
#搜狐源
deb http://mirrors.sohu.com/ubuntu/ precise-updates main restricted
deb-src http://mirrors.sohu.com/ubuntu/ precise-updates main restricted
deb http://mirrors.sohu.com/ubuntu/ precise universe
deb-src http://mirrors.sohu.com/ubuntu/ precise universe
deb http://mirrors.sohu.com/ubuntu/ precise-updates universe
deb-src http://mirrors.sohu.com/ubuntu/ precise-updates universe
deb http://mirrors.sohu.com/ubuntu/ precise multiverse
deb-src http://mirrors.sohu.com/ubuntu/ precise multiverse
deb http://mirrors.sohu.com/ubuntu/ precise-updates multiverse
deb-src http://mirrors.sohu.com/ubuntu/ precise-updates multiverse
deb http://mirrors.sohu.com/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ precise-backports main restricted universe multiverse

杀死进程

ps -ef | grep nginx
#结果中,main为主进程,杀死主进程的PID就行
kill -QUIT 进程号

修改daemon.json后出现错误

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
解决方法
systemctl daemon-reload
service docker restart
service docker status

ubuntu安装ifconfig

apt-get install net-tools

ubuntu安装ping

apt-get install inetutils-ping