Docker 安装异常处理 及 基础使用

Docker知识整理
初识docker
什么是docker?
Docker是基于 Go 语言实现的开源容器项目,它提供了为应用程序创建轻量级/可移植/高效的容器方案。支持部署到本地和云平台环境。使用Docker有很多好处,比如更快的交付和部署,更高效的资源利用,更轻松的迁移。它的应用场景包括Web应用的自动化打包部署,自动化测试,持续集成等。
Docker容器的优势
脱离底层物理硬件的限制;容易获取。实现了快速开发和部署的优势。通过容器来打包应用、解藕应用和运行平台这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否是同一类型的平台 。
总结优势:更快的交付和部署;更高效的资源利用(不需要额外的虚拟化管理程序像Virtual Machine);更轻松的迁移,几乎可以运行在任何平台;更简单的更新管理,使用Dokerfile,只需做小部分的配置修改。
Docker与虚拟机
作为一种轻量级的虚拟化方式, Docker 在运行应用上跟传统的虚拟机方式相比具有如下:
显著优势:
Docker 容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式(数分钟)要快得多;
Docker 容器对系统资源需求很少,一台主机上可以同时运行数千个 Docker 容器(在IBM 服务器上已经实现了同时运行10K 量级的容器实例);
Docker 通过类似 Git 设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新;
Docker 通过 Dockerfile 支持灵活的自动化创建和部署机制,以提高工作效率,并标准化流程;

Docker与虚拟化
传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。Docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因更加轻量级。

核心概念与配置
Docker中的三大概念:
镜像(Image)、容器(Container)、仓库(Repository)
核心概念
Docker 大部分的操作都围绕着它的三大核心概念 镜像、容器和仓库。因 ,准确把握这三大核心概念对于掌握 Docker 技术尤为重要。
Docker 镜像
Docker镜像类似虚拟机的镜像,可以理解为一个只读的模板。镜像是创建Docker容器的基础。通过版本管理和增量的文件系统,Docker 提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。
Docker容器
Docker容器类似一个轻量级的沙箱,Docke利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例 它可以启动、开始、停止 删除,而这些容器都是彼此相互隔离、互不可见的。
Docker仓库
Docker 仓库类似于代码仓库,是 Docker 集中存放镜像文件的场所。有时候我们会将 Docker 仓库和仓库注册服务器( Register)混为一谈,并不严格区分。实际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库 每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签( tag )来进行区分。例如存放 Ubuntu 操作系统镜像的仓库,被称为Ubuntu 仓库,其中可能包括 16.04 18 04 等不同版本的镜像。仓库注册服务器的示例如图二 所示。

根据所存储的镜像公开分 与否, Docker 仓库可以分为公开仓库(Public )和私有仓库( Private )两种形式。
Docker引擎
Docker 引擎是使用 Docker 容器的核心组件,可以在主流的操作系统和云平台上使用,包括 Linux 操作系统(如 Ubuntu Debian CentOS Red.hat 等),macOS Windows 操作系统,以及 IBM 、亚马逊、微软等知名云平台。
Ubuntu 安装Docker
1、安装要求
Ubuntu 操作系统对 Docker 的支持十分成熟,可以支持包括 x86_64、arm、 s390x 等系统架构,只要是 64 位即可。
docker 目前支持的最低 ubuntu 版本为 14.04 LTS ,但实际上从稳定性上考虑,推荐使用16.04 .0.4 TS 版本,并且系统内核越新越好,以支持Docker 最新的特性。
查看系统内核版本 uname -u

或者 cat /proc/version

2、添加镜像源
允许apt通过https使用repository安装软件包:
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
添加源的 gpg 密钥:
官方:sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
国内阿里:sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
验证key的指纹:
sudo apt-key fingerprint 0EBFCD88

添加稳定版repository
官方:
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.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable”
安装Docker
apt-get install -y docker-ce
安装问题
安装时报错Unable to find cpu cgroup in ***
修改 /boot/grup/grup.cfg 中cgroup_disable=pids,修改后重启服务器。

Failed to start daemon: Devices cgroup isnit mouned
执行下面脚本:
#!/bin/sh
# Copyright 2011 Canonical, Inc
# 2014 Tianon Gravi
# Author: Serge Hallyn serge.hallyn@canonical.com
# Tianon Gravi tianon@debian.org
set -e

# for simplicity this script provides no flexibility


# if cgroup is mounted by fstab, don't run
# don't get too smart - bail on any uncommented entry with 'cgroup' in it
if grep -v '^#' /etc/fstab | grep -q cgroup; then
	echo 'cgroups mounted from fstab, not mounting /sys/fs/cgroup'
	exit 0
fi


# kernel provides cgroups?
if [ ! -e /proc/cgroups ]; then
	exit 0
fi


# if we don't even have the directory we need, something else must be wrong
if [ ! -d /sys/fs/cgroup ]; then
	exit 0
fi


# mount /sys/fs/cgroup if not already done
if ! mountpoint -q /sys/fs/cgroup; then
	mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup
fi


cd /sys/fs/cgroup


# get/mount list of enabled cgroup controllers
for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do
	mkdir -p $sys
	if ! mountpoint -q $sys; then
		if ! mount -n -t cgroup -o $sys cgroup $sys; then
			rmdir $sys || true
		fi
	fi
done


# example /proc/cgroups:
#  #subsys_name	hierarchy	num_cgroups	enabled
#  cpuset	2	3	1
#  cpu	3	3	1
#  cpuacct	4	3	1
#  memory	5	3	0
#  devices	6	3	1
#  freezer	7	3	1
#  blkio	8	3	1


# enable cgroups memory hierarchy, like systemd does (and lxc/docker desires)
# https://github.com/systemd/systemd/blob/v245/src/core/cgroup.c#L2983
# https://bugs.debian.org/940713
if [ -e /sys/fs/cgroup/memory/memory.use_hierarchy ]; then
	echo 1 > /sys/fs/cgroup/memory/memory.use_hierarchy
fi


exit 0

使用镜像
搜索镜像
docker search image

常用参数:
–filter, -f 过滤内容
docker search centos --filter=STARS=6000 #STARS大于6000的镜像
–limit int
docker search centos –limit 10 #只显示前10条
–no-trunc 不截断

下载镜像
dockers pull images:tag #pull 镜像时如果不加tag时默认下载最新版本latest。

查看镜像
docker images
使用tag命令添加镜像标签
docker tag centos:latest mycentos:1.1

docker inspect image:tag #查看镜像详细信息
删除镜像
删除镜像
docker rmi image || docker image rm #imag可以是image:tag或镜像id
常用参数:
-f ,–force :强制删除镜像
–no-prune:不要清除未带标签的父镜像(及安装镜像的过程镜像)
注意:删除镜像时正确的做法是先移除依赖该镜像的容器,在删除镜像。
清理镜像
Docker image prune #清理过程或一些遗留的临时镜像
常用参数:
-a, --all 删除所有无用的镜像
–filter 过滤
–force,-f 强制删除
创建镜像
基于容器创建
Docker [container] commit [options] CONTAINER [REPOSITORY:TAG]
例如:容器id:120dcf865d4a
docker commit -a “zhupenghui” -m “test add dir” 120dcf865d4a testubuntu:1.0

Dockerfile创建
Vim Dockerfile

构建一个有带vim、net-tools、python3的镜像
docker build -f PATH/Dockerfile -t ubuntu_python3:1.0
存入和载入镜像
保存镜像
Docker [image] save -o filename
载入镜像
Docker load < filename
Docker 容器操作
容器的主要操作命令有 create 、start 、run、wait和logs
新建容器
Docker [container] create
如:docker create -it ubuntu:latest
查看容器使用docker ps -a
常用参数:
-i : 保持标准输入打开,默认为 false;
-t : 是否分配一个伪终端,默认为 false
-p :射到本地主机端口,例如 -p 11234- 12234: 1234-2234
启动容器
Docker start container
通过docker ps 查看运行中的container
新建并启动容器
Docker run image #运行
Run 运行时后台的操作包括:
检查本地是否存在指定的镜像,不存在就从公有仓库下载;
利用镜像创建一个容器,并启动该容器;
分配一 个文件系统给容器,并在只读的镜像层外面挂载一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去;
从网桥的地址池配置一个 IP 地址给容器;
执行用户指定的应用程序;
执行完毕后容器被自动终止 #容器没有执行内容直接退出
查看容器输出信息
Docker [container] logs container-id/container-name
例如:docker logs 30ecb4ebf1fb
常用参数:
-f ,–follow :保持输出
–details :显示详细信息
–since string :输出从某个时间开始的日志
–tail string : 输出最近日志
-t :显示时间戳
–until string :输出某个时间之前的日志
停止容器
Docker pause container-id/container-name #暂停容器
Docker unpause container-id/container-name #恢复容器
终止容器
Docker stop container-id/container-name
进入容器
a)、docker attach [–detach-keys[=[]] [–no-stdin]] container-id/container-name
–detach-keys [=[]]:指定退出 attach 模式的快捷键序列, 默认是 CTRL-p CTRL-q;
–no-stdin=true|false :是否关闭标准输入,默认是保持打开;

b)、docker exec container-id/container-name
例如:docker exec -it 30ecb4ebf1fb
删除容器
Docker rm container-id/container-name
例如:docker rm -f 30ecb4ebf1fb
常用参数:
-f :强制删除
-l :删除容器的链接
-v :删除容器挂在的卷
导入和导出容器
某些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用 Docker 的导人和导出功能,这也是 Docker 自身提供的一个重要特性。
1、导出容器
docker export -o container-id/container-name
2、导入容器
docker import [-m string] container-file image:tag

查看容器
Docker inspect container-id/container-name
查看容器详细信息会以 json 格式返回包括容器 Id 创建时间、路径、状态、镜像、配置等在内的各项信息:

查看容器内的进程
Docker top container-id/container-name

查看统计信息
Docker stats container-id/container-name

Docker 数据管理
数据卷
数据卷 Data Volumes 是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于 Linux 中的 mount 行为。
数据卷的作用:
数据卷可以在容器之间共事和重用,容器间传递数据将变得高效与方便;
对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;
对数据卷的更新不会影响镜像,解摘开应用和数据
卷会一直存在 ,直到没有容器使用,可以安全地卸载它
创建数据卷
Docker volume create -d local dirname
除了create子命令外,docker volume 还支持 inspect(查看详细信息)、 ls(列出已有数据卷) prune(清理无用数据卷)、rm(删除数据卷)等,可以自行实践。
绑定数据卷
docker run –mount type=volume|bind|tmpfs source=localpath destination=container-path image
简单用法
Docker run -v localpath: container-path image
Docker中数据卷默认权限是读写,更改权限的方式如下
Docker run -v localpath: container-path:or image #加:ro表示只读。
数据卷容器
多个容器共享数据,使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。
创建步骤:
创建数据卷容器dbdata, 并在其中创建一个数据卷挂载到/dbdata。
Docker run -it -v /dbdata –name dbdata ubuntu
其他容器可以使用–volumes-from来挂在dbdata容器中数据卷
Docker run -it –volumes-from dbdata –name db ubuntu

使用Dockerfile创建镜像
Dockerfile 由一行行命令语句组成, 并且支持以#开头的注释行。
Dockerfile配置命令
1、ARG #ARG name=value
定义创建镜像过程中的变量,ARG的变量只在Dockerfile文件生效。
2、ENV #ENV name=value
定义环境变量,在问价和容器中都生效
FROM # FROM image AS
导入创建镜像的基础镜像
RUN # RUN python3 index.py
运行指定命令
LABEL # LABEL author=“docker@github” date=“2020-01-01”
LABEL 指令可以为生成的镜像添加元数据标签信息。 这些信息可以用来辅助过滤出特定镜像。
EXPOSE # EXPOSE 80 88
镜像内服务监听端口
ENTRYPOINT # ENTRYPOINT command param 1 param2 :shell中执行|| ENTRYPOINT [“executable”, "paraml ", “param2”]: exec 调用执行
VOLUME # VOLUME [“/data”,”/data2”]
创建数据卷
USER # USER BIGTERA
指定容器的运行用户
WORKDIR
进入容器的工作点
ADD # ADD
该命令将复制指定的<src>路径下内容到容器中的<dest>路径下 。ADD相当与COPY 和减压
COPY #ADD
复制内容到镜像
创建镜像
docker build -f /root/Dockerfile -t ubuntu/vim:1.0.0 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值