虚拟机技术每家公司发展到一定规模都必须考虑的,更好的环境隔离,更好的事故排查,更好的服务部署

  • docker的原理
  • docker更换阿里源
  • docker容器的相关命令
  • Dockerfile文件编写
  • docker镜像的相关命令

关注公众号,一起交流,微信搜一搜: 潜行前行

1 docker的原理

  • Docker 利用Linux 中的核心分离机制,例如Cgroups,以及Linux的核心Namespace(名字空间)来创建独立的容器。一句话概括起来Docker就是利用Namespace做资源隔离,用Cgroup做资源限制,利用Union FS做容器文件系统的轻量级虚拟化技术。Docker容器的本质还是一个直接运行在宿主机上面的特殊进程,看到的文件系统是隔离后的,但是操作系统内核是共享宿主机OS,所以说Docker是轻量级的虚拟化技术

docker 镜像分层

  • docker 容器,理解为一个或多个运行进程,而这些运行进程将占有相应的内存,相应的CPU计算资源,相应的虚拟网络设备以及相应的文件系统资源。而 docker 镜像,则像一个未运行的软件包,为 docker 容器的运行提供文件资源。
  • docker 镜像是分层的。启动镜像时,一个新的可写层会加载到镜像的顶层。这一层通常称为"容器层",之下是"镜像层",可能存在多个层。容器层可以读写,容器所有发生文件变更写都发生在这一层。镜像层只允许读取,read-only
  • 在容器层的文件增删操作,命令安装,都会被记录下来。我们可以通过 commit 命令来创建一个新的镜像

2 docker 更换阿里源

# vi /etc/apt/sources.list
~~更新源
# sudo apt-get clean
# sudo apt-get update
~~ 安装vim
# apt-get install vim
  • ubuntu 18 的阿里镜像文件。使用下面的数据替换原 sources.list 里的数据
deb http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe

3 docker容器的相关命令

run 实例化容器

  • 创建一个新的容器并运行:docker run [options] image [command]。image 可以是镜像ID 也可以是仓库名+Tag名:repository[:tag]
options 常用参数
-i 以交互模式运行容器,通常与 -t 同时使用
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-d 后台运行容器,并返回容器ID
--name=<name> 为容器指定一个名称
-p 指定端口映射,格式为:主机(宿主)端口:容器端口
--net="bridge" 指定容器的网络连接类型,支持bridge/host/none/container: 四种类型
-e ="v" 设置环境变量
  • 示例
[root@lwl]# docker run -it -p 80:80 --name mynginx nginx:latest /bin/bash
root@b8573233d675:/# ~~ 如果容器的启动命令是依赖伪终端执行,则需要 -it,如 ubuntu:14.04 镜像
~~ 没有依赖伪终端执行的启动命令,可去掉-it,因为-d 参数会直接返回容器ID
[root@lwl]# docker run -it -d -p 80:80 --name mynginx nginx:latest
315cc38afc2f06abb5a2fbb075ebca16455367b2de685cf0c5ba828ab62dd5a1
[root@lwl]#

start、stop、restart 启动与停止

~~ 启动已被停止的容器 。 container 可以是容器名 也可以是容器ID
# docker start container
~~ 停止运行中的容器
# docker stop container
~~ 重启容器
# docker restart container

ps 容器查询

// 列出容器
# docker ps [-options] -a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小 // 相当于在 container 容器里使用 top命令
# docker top container

rm 删除容器

# docker rm container

cp 文件传输

  • 本机和 docker 容器之前的文件传输
~~ 复制本地目录 srcPath 到 容器 container 的目录 destPath
# docker cp srcPath container:destPath
~~ 复制容器 container 的目录 srcPath 到本地目录 destPath
# docker cp container:destPath srcPath

exec 在运行的容器中执行命令

docker exec [options] container command 

-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端 ~~ 在容器 mynginx 中以交互模式执行容器内 /root/run.sh 脚本
# docker exec -it mynginx /bin/sh /root/run.sh
~~ 在容器 mynginx 中开启一个交互模式的终端
# docker exec -it mynginx /bin/bash

logs 获取容器的日志

docker logs [options] container

-f      跟踪日志输出
--since 显示某个开始时间的所有日志
-t 显示时间戳
--tail 仅列出最新N条容器日志 [root@lwl]# docker logs -f mynginx
192.168.239.1 - - [10/Jul/2021:16:53:33 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"
2021/07/10 16:53:33 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.239.1, server: localhost, request: "GET /favicon.ico HTT
....

4 Dockerfile文件编写

# docker build -f /path/to/a/Dockerfile
// 1 FROM:指定基础镜像,必须为第一个命令,格式:
FROM <image>
FROM <image>:<tag>
// 2 MAINTAINER: 维护者信息 格式:
MAINTAINER <name>
// 3 ENV:设置环境变量 格式
// 4 ARG:用于指定传递给构建运行时的变量 格式:
ARG <name>[=<default value>]
// 5 WORKDIR:工作目录,类似于cd命令 格式:
WORKDIR /path/to/workdir
ENV <key>=<value
// 6 ADD:将本地文件添加到容器中,可以访问网络资源,类似wget
ADD <src>... <dest>
// 7 COPY:功能类似ADD,但是是不会自动解压文件
// 8 RUN:构建镜像时执行的命令 格式
RUN <command>
// 9 CMD:构建容器后调用,也就是在容器启动时才进行调用
CMD command param1 param2 (执行shell内部命令)
// 10 ENTRYPOINT:配置容器,使其可执行化
ENTRYPOINT command param1 param2 (shell内部命令)
  • Dockerfile 示例
# 基础镜像
FROM centos
# 维护者信息
MAINTAINER tianfeiyu
#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#ADD 文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/
ADD epel-release-latest-7.noarch.rpm /usr/local/ # RUN 执行以下命令
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www # WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0 RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf # CMD 运行以下命令
CMD ["nginx"]

5 docker 镜像的相关命令

  • 镜像查看列举:docker images
  • 镜像搜索:docker search <imageName>;imageName 是 repository[:tag] 的模糊词
  • 拉取:docker pull repository[:tag]
  • 删除单个镜像:docker rmi 镜像ID 或者docker rmi repository[:tag]
  • 给镜像打别名(标签):docker tag oldRepository[/:oleTag] newRepository][/:newTag]
# docker tag ubuntu:15.10 lwl/ubuntu:v3
  • 构建镜像
~~ 根据 Dockerfile 构建镜像
# docker build -t repository[:tag] dir
# docker build -t lwl/ubuntu:v1 . options 参数
--build-arg=[] 设置镜像创建时的变量
-t 镜像的名字及标签,通常 name:tag 或者 name 格式
-f 指定要使用的Dockerfile路径
~~ 根据正在运行的 container 容器 构建镜像
# docker commit [options] container repository[:tag] options 参数
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停
  • 推送:docker push repository[:tag]

欢迎指正文中错误

参考文章

技能篇:docker的简易教程的更多相关文章

  1. Docker之Ubuntu上使用Docker的简易教程

    Ubuntu上使用Docker的简易教程 原始文档:https://www.yuque.com/lart/linux/fp6cla 说在开头 在天池的比赛中涉及到了docker的使用.经过多番探究,大 ...

  2. BIND简易教程(2):BIND视图配置

    目录:BIND简易教程(1):安装及基本配置BIND简易教程(2):BIND视图配置(本篇)BIND简易教程(3):DNSSec配置 上文书说到,我们把aaa.apple.tree解析到192.168 ...

  3. BIND简易教程(1):安装及基本配置

    首先,为什么说是简易教程呢?因为BIND的功能实在太多,全写出来的话要连载好久,我觉得我没有那么多精力去写:而我了解的仅仅是有限的一点点,不敢造次.百度上的文章也是一抓一大把呐!所以,教点基本使用方法 ...

  4. Flow简易教程——安装篇

    .mydoc_h1{ margin: 0 0 1em; } .mydoc_h1_a{ color: #2c3e50; text-decoration: none; font-size: 2em; } ...

  5. Zabbix实战-简易教程系列

    一.基础篇(安装和接入) Zabbix实战-简易教程--总流程  Zabbix实战-简易教程--整体架构图 Zabbix实战-简易教程--DB安装和表分区 Zabbix实战-简易教程--Server端 ...

  6. 文科妹学 GitHub 简易教程(转)

    文科妹学 GitHub 简易教程     #什么是 Github ?必须要放这张图了!!! Git 是由 Linux 之父 Linus Tovalds 为了更好地管理linux内核开发而创立的分布式版 ...

  7. JavaScript简易教程(转)

    原文:http://www.cnblogs.com/yanhaijing/p/3685304.html 这是我所知道的最完整最简洁的JavaScript基础教程. 这篇文章带你尽快走进JavaScri ...

  8. Intellj IDEA 简易教程

    Intellj IDEA 简易教程 目录 JDK 安装测试 IDEA 安装测试 调试 单元测试 重构 Git Android 其他 参考资料 Java开发IDE(Integrated Developm ...

  9. Argparse简易教程

    Argparse简易教程 原文:Argparse Tutorial 译者:likebeta 本教程是对于Python标准库中推荐使用的命令行解析模块argparse的简单介绍. PS:还有其他两个模块 ...

随机推荐

  1. 出现异常org.yaml.snakeyaml.parser.ParserException: while parsing a block mapping

    这是因为yaml的配置文件格式出错导致的异常 原代码,仔细看数据源的配置没有和type的路径一致,而是下一级的目录,所以导致出错 使用shift+tab快捷键向左移动改变下就好了 最后成功运行

  2. 实用程序包utils - 基于Rollup打包输出各模块文件(二)

    上一次,我们讲到了如何去搭建一个前端工具库的工程,那么今天我们来聊一聊如何去将其打包输出. 需求 事情是这个样子的.我有一个这样的需求,或者是我发现有这么一个需求.就是有时候吧,我也不想搞的那么复杂, ...

  3. GO学习-(33) Go实现日志收集系统2

    Go实现日志收集系统2   一篇文章主要是关于整体架构以及用到的软件的一些介绍,这一篇文章是对各个软件的使用介绍,当然这里主要是关于架构中我们agent的实现用到的内容 关于zookeeper+kaf ...

  4. Go语言基础包之net/http

    Go语言基础包之net/http Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现. net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的 ...

  5. FinFET与2nm晶圆工艺壁垒

    FinFET与2nm晶圆工艺壁垒 谈到半导体工艺尺寸的时候,通常对于下面的一串数字耳熟能详:3um.2um.1.5um.1um.0.8um.0.5um.0.35um.0.25um.0.18um.0.1 ...

  6. Wide & Deep的OneFlow网络训练

    Wide & Deep的OneFlow网络训练 HugeCTR是英伟达提供的一种高效的GPU框架,专为点击率(CTR)估计训练而设计. OneFlow对标HugeCTR搭建了Wide & ...

  7. AI解决方案:边缘计算和GPU加速平台

    AI解决方案:边缘计算和GPU加速平台 一.适用于边缘 AI 的解决方案 AI 在边缘蓬勃发展.AI 和云原生应用程序.物联网及其数十亿的传感器以及 5G 网络现已使得在边缘大规模部署 AI 成为可能 ...

  8. 工作流引擎Activiti使用进阶!详细解析工作流框架中高级功能的使用示例

    Activiti高级功能简介 Activit的高级用例,会超越BPMN 2.0流程的范畴,使用Activiti高级功能需要有Activiti开发的明确目标和足够的Activiti开发经验 监听流程解析 ...

  9. 端午总结Vue3中computed和watch的使用

    1使用计算属性 computed 实现按钮是否禁用 我们在有些业务场景的时候,需要将按钮禁用. 这个时候,我们需要使用(disabled)属性来实现. disabled的值是true表示禁用.fals ...

  10. 关于Maven repository中pom.xml的jar包依赖

    https://mvnrepository.com 该mvn网站可以找到个个版本的依赖jar包  http://doc.canglaoshi.org 该网站为达内的开发文档服务器,可以找到很多开发中需 ...