Docker(小白刚进门)
本文仅对所学知识所做的笔记,如果能给你带来帮助,我也会感到非常幸运
Docker简介
什么是容器?
- 一种虚拟化的方案
- 操作系统级别的虚拟化
- 只能运行相同或相似内核的操作系统
- 依赖于Linux内核特性:
Namespaces
和Cgroups(Control Group)
什么是Docker?
- 将应用程序自动部署到容器
- Go语言开源引擎 Github地址:https://github.com/docker/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
- 检查
APT
的HTTPS
支持,查看/usr/lib/apt/methods/https
文件是否存在,如果不存在,运行安装命令
apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
- 添加仓库的key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 设置稳定版仓库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
- 安装
docker-ce
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io
- 查看docker是否安装好了
docker version
- 设置一个用户组,因为普通用户每次都要在命令前加
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 #删除多个镜像,中间用空格分开
获取和推送镜像
查找镜像
- 通过官网
Docker Hub
https://registry.hub.docker.com
- 通过命令
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官方中国区 |
|
网易 |
|
中国科学技术大学 |
|
阿里云 |
|
步骤
- 修改
/etc/docker/daemon.json
文件,没有可以自己建一个
vim /etc/docker/daemon.json
- 写入json数据
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}
- 重启Docker使配置生效
systemctl restart docker.service
推送镜像
docker push NAME[:TAG]
#详细请见阿里云镜像推送
构建镜像
- 保存对容器的修改,并再次使用
- 自定义镜像的能力
- 以软件的形式打包并分发服务及其运行环境
方式
- docker commit:通过容器构建
- 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构建(常用)
- 创建Dockerfile
- 使用$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守护进程配置和操作
查看守护进程
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
完了之后用另一台主机访问
#192.168.73.128是上面那台修改了docker配置文件的主机ip
curl http://192.168.73.128:2375/info
客户端
#使用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=""
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都会分配一个ip
和mac
地址给容器,并映射网络到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不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理。
数据卷(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 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 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