1. Docker基本概念

1.1 什么是 docker hub

DockHub是一个仓库

https://hub.docker.com/

仓库是集中存放镜像文件的场所

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

  • docker拉取命令

    docker pull centos
  • docker 查看镜像

    docker images

1.2 什么是docker镜像?

Docker镜像是一个特殊的文件系统 除了运行时所需要的程序,库 资源 配置等文件意外,还包含了一些运行时的准备的的一些配置参数(如匿名卷、环境变量、用户等).镜像不包含任何动态数据、其内容在构建之后也不会被改变。



共享一个base镜像 但是base镜像不会被修改

只会修改单个容器内

这个用到了docker特性

每当一个镜像被创建 就会创建一个可写层在上方

这个可写层又被称为容器层 容器层的下方统一叫镜像层

使用centos镜像创建一个容器

sudo docker run --name centos_test -it centos /bin/bash

1.3 什么是容器

容器是一种轻量级,可移植,自包含的软件打包技术 ,是一种应用程序,可以

在九乎任何地方以相同的方式运行。

开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系

统的虚拟机,物理服务器或公有云主机上运行。

那为什么需要容器 以及为什么被称为容器?

1.4 docker容器的优势

容器的优势 ,对于开发人员来说,创建一次,可以在任何地方运行,对于运维人员来说,配置一次,可以运行所有应用

1.5 docker容器是如何工作的

docker的核心组件包括:

docker客户端,docker服务器,docker镜像,registry,docker容器

1.6 docker客户端

在Linux系统下,Docker Client 和Docker daemon和容器直接运行在宿主机上,这意味着容器可直接使用宿主机端口资源,不需要在容器和宿主机之间映射端口。

在Windows或Max X系统下,Docker服务运行在Linux虛拟机里,Dockerclient运行在宿主机下跟Docker服务通信。,当运行容器里,它用的端口资源是虛拟机里的,必须跟宿主机上的端口映射。



6.1.7 docker 服务

Docker 服务是Docker最核心的后台进程,它负责响应来自Docker client的请求,然后将这些请求翻译成系统调用完成容器管理操作。

该进程会在后台启动一个API Server负责接收由Docker client发送的请求;接收到的请求将通过Docker 服务内部的一个路由分发调度,再由具体的西数来执行请求。

2. docker 命令

容器运行

$ docker run -it centos /bin/sh

docker 客户端使用docker命令来运行 run参数 表明客户端要运行一个新的容器.

docker客户端要运行一个容器需要告诉 docker守护进程的最小参数是:

  1. 这个容器从哪个镜像中创建.这是centos,基础的centos镜像
  2. 在容器中要运行的命令,这里是/bin/bash 在容器中运行bash shell

那么运行这个命令在底层发生了什么?

按照顺序

  1. 拉取镜像 检查是否存在 如果没有会在docker pub中下载.如果已存在 创建新的容器
  2. 创建新的容器,当docker 有了这个镜像之后,docker 会用他创建一个新的容器.
  3. 分配文件按系统 并且挂载一个可读写的曾,容器会在这个文件系统中创建.并且一个可读写的曾被添加到镜像中,
  4. 分配网络/桥接接口,创建一个运行容器与本地主机通信的网络接口.
  5. 设置一个ip地址:从池中寻找一个可用的ip并且附加到容器中
  6. 运行你指定的程序 运行该程序
  7. 铺货并且提供应用输出: 链接并且记录标准输出,输入和错误,让你可以看到你的程序如何运行的

查看所有运行 的容器

docker ps -a

停止 docker

docker stop id

杀死进程

docker kill id

进入容器内部

docker attach id

通过 docker exec -it + 短id 进入容器内部

docker exec -it + 短id

attach 和exec的区别

attach 和exec主要区别如下

  • attach 直接进入容器启动命令的终端,不会启动新的进程.
  • exec 则是在容器中打开新的终端 并且可以启动新的进程
  • 如果像直接在终端查看命令的输出 用attach
  • 其他请看用exec

其他的一些命令

# 启动死掉的容器
docker start 短id # 重启 docker容器
docker restart 短id # 暂停 docker 容器 # 不会占用资源
docker pause 短id # 重新运行 容器
docker unpause 短id # 删除docker 容器 #可以同时删除两个 空格隔开
docker rm 短id 短id # 批量删除 所有死掉的docker
docker rm -v $(docker ps -aq -f status=exited) # 删除镜像
docker rmi hello-world # 删除异常停止的容器
docker rm `docker ps -a | grep Exited | awk '{print $1}'` # 删除名称或标签为none的镜像
docker rmi -f `docker images | grep '<none>' | awk '{print $3}'` # 清除所有无容器使用的镜像 注意,此命令只要是镜像无容器使用(容器正常运行)都会被删除,包括容器临时停止
docker system prune -a

4. docker-appium的使用

docker 安装apoium 巨坑!! 不建议安装

这里推荐另一种方式 直接从docker hub上安装

sudo docker search appium



然后 docker pull 镜像即可

sudo docker pull appium/appium

如果下载的太慢 可手动配置加速器

  • 创建一个Docker的配置文件。

    • sudo vim /etc/docker/daemon.json
  • 编写配置文件
    • { "registry-mirrors": ["此处写镜像源地址"]
    • Docker镜像源地址:

官方国内镜像 https://registry.docker-cn.com

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

中国科技大学 https://docker.mirrors.ustc.edu.cn

  • 重新加载配置文件并重启Docker。

    • sudo systemctl daemon-reload
    • sudo systemctl restart docker
  • 验证镜像源是否修改成功
    • sudo docker info
    • 查看docker 容器ip
      • docker inspect 容器ID | grep IPAddress

5. 自己提交一个镜像

我们运行的容器可能在镜像的基础上做了一些修改,有时候我们希望保存起来,封装成一个更新的镜像,这时候我们就需要使用 commit 命令来构建一个新的镜像

docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交后的镜像名:Tag

我们拉取一个tomcat镜像 并持久化运行 且设置与宿主机进行端口映射

docker pull tomcat

docker run -itd -p8080:8080 --name tom tomcat /bin/bash

使用 提交命令 将在运行的tomcat 容器 打包为一个全新的镜像 名字为tom Tag为1.0

docker commit -a="leilei" -m="第一次打包镜像,打包后直接访问还会404吗" 231f2eae6896 tom:1.0

6. Docker镜像创建的两种方法

6.1. 使用commit 命令创建docker镜像

创建一个nginx镜像

sudo docker run --name webserver -d -p 80:80 nginx

运行完命令 创建成功

然后我们访问浏览器

假设我们不喜欢这个页面 想修改这个页面

我们可以进入docker容器内

sudo docker exec -it webserver bash

然后 输入命令

echo '<h1>hello,docker!</h1>' >/usr/share/nginx/html/index.html

然后就修改了页面了

docker diff命令

我们修改了文件即修改了存储层

可以通过命令查看刚刚有哪些操作

sudo docker diff webserver

Docker commit 命令

Docker commit 命令可以叠加内容从而重新生成一个镜像

docker commit [选项]<容器ID或容器苗> [<仓库名>][:<标签>]

sudo docker commit --author "lzc <hybpjx@163.com>" --message "modify Default page" webserver nginx:v2

这个时候就可以通过sudo docker images来查看了

或者通过sudo docker histroy nginx:v2

我们再创建一个为81端口的nginx容器

sudo docker run --name web2 -d -p 81:80 nginx:v2

然后访问 192.168.2.91:81

可以发现 页面还是一样的 说明镜像创建成功

!!!! 慎用 docker commit 命令

使用docker commit 命令虽然可以比较直观的帮助理解镜像分层的概念 但是实际开发环境不会这么使用

因为由于命令执行了 很多文件发生了改动 这还仅仅是简单错误 如果是安装文件 编译构建 那么镜像会非常臃肿,

此外 使用docker commit 意味着 所有对镜像的操作都是黑箱操作,生成的镜像也被称之为 黑箱操作

6.2 使用Dockerfile 创建docker镜像

什么是dockerfile

Dockerfile 是一个文本文件。其包含了一条一条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应该如何构建。

命令:

必须命名为Dockerfile

mkdir mynginx
cd mynginx
touch Dockerfile

然后编辑此文件

FROM nginx
RUN echo '<h1>Hello,world</h1>' > /usr/share/nginx/html/index.html

然后执行命令(记住有个 点 . 代表执行dockerfile的目录)

sudo docker build -t nginx:v3 .

我们可以把镜像上传到docker中去

https://hub.docker.com/repositories

在我们上传镜像 要确保我们的docker 账号是登录状态的

  • 登录命令命令

    sudo docker login -u xxx -p xxx
  • 修改tag命令

    sudo docker tag nginx:v3 hybpjx/nginxv3:v3

使用这个名字

然后执行

sudo docker push hybpjx/nginxv3:v3

即可完成上传

FROM 和RUN

【FROM指定基础镜像】

基础镜像是必须指定的。而FROM就是指定基础镜像,因此应该Dockfile中FROM是必备的指令。并且必须为第一条指令。

【Run指令的两种格式】

shell 格式:RUN<命令>,就像是再命令行中输入的命令一样。

exec格式:RUN["可执行文件","参数1","参数2"],这更像是函数中调用的格式

比如

RUN apt-get update
RUN apt-get install vim

就是创建了两层镜像 这样毫无意义

最大不能超过127层的

正确写法为:

RUN apt-get install \
&& apt-get install vim

注意: 任何无关的文件都要清理

docker常用配置以及命令的更多相关文章

  1. Redis常用配置和命令总结

    Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言 ...

  2. LINUX常用配置及命令

    一.   Fedora系统配置 1.      [设置网卡IP] 步骤如下: 1)     用root用户登陆,打开/etc/sysconfig/network-scripts/ifcfg-eth0文 ...

  3. H3C常用配置和命令

    邻居发现命令display lldp neighbor-information list DHCP中继配置dhcp enabledhcp relay server-group 1 ip x.x.x.x ...

  4. Cisco常用配置和命令

    1.ASA常用管理management-access inside      #开启远程连接inside口 show snmp-server oidlist          #查看ASA snmp的 ...

  5. docker 常用的容器命令

    容器命令 # --name 给容器起名 # -p 端口映射 # -d 后台启动 # -it 交互模式启动 # 交互模式启动 # docker run -it 镜像名/id /bin/bash # do ...

  6. 02-docker入门-docker常用的一些命令

    在这里,有必要先对ducker在做一次介绍 ducker 是一个容器. 容器内部运行的是一个系统. 系统内部安装好了要调试 / 发布的工程,然后这个系统被打包成了一个镜像. ducker 就是这个镜像 ...

  7. Iptables 防火墙常用配置

    转至:https://blog.csdn.net/lswzw/article/details/87971259 Iptables 防火墙常用配置 概念 命令行模式 查看 & 命令 -n:直接显 ...

  8. 关于Docker 常用命令

    Docker 常用命令 分类列一下常用的CLI命令 仓库相关 search/ pull / push / login etc. 例:docker pull ubuntu 从仓库下载ubuntuimag ...

  9. docker专题(2):docker常用管理命令(上)

    http://segmentfault.com/a/1190000000751601 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备 ...

随机推荐

  1. 网站制作工具之EditPlus的使用

    这里分享网站制作教程所使用到的软件,我个人开发使用的是EditPlus和Dreamweaver这两款软件.在百度搜索一下这两个软件,安装好后就可以使用了. EditPlus的使用方法 EditPlus ...

  2. hadoop 不在 sudoers 文件中,此事将被报告。

    问题来源: 使用sudo命令,让hadoop用户使用root身份执行命令时报错: [hadoop@mydocker ~]$ sudo date [sudo] password for hadoop: ...

  3. 第八十四篇:Vue购物车(五) 商品数量的增减

    好家伙, 1.商品数量的增减 我们把商品的数量增减独立出来,写成一个独立的组件Counter <template> <div class="number-container ...

  4. 【读书笔记】C#高级编程 第二十一章 任务、线程和同步

    (一)概述 所有需要等待的操作,例如,因为文件.数据库或网络访问都需要一定的时间,此时就可以启动一个新的线程,同时完成其他任务. 线程是程序中独立的指令流. (二)Paraller类 Paraller ...

  5. jenkins流水线部署springboot应用到k8s集群(k3s+jenkins+gitee+maven+docker)(1)

    前言:前面写过2篇文章,介绍jenkins通过slave节点部署构建并发布应用到虚拟机中,本篇介绍k8s(k3s)环境下,部署jenkins,通过流水线脚本方式构建发布应用到k8s(k3s)集群环境中 ...

  6. [Python]-sklearn模块-机器学习Python入门《Python机器学习手册》-02-加载数据:加载数据集

    <Python机器学习手册--从数据预处理到深度学习> 这本书类似于工具书或者字典,对于python具体代码的调用和使用场景写的很清楚,感觉虽然是工具书,但是对照着做一遍应该可以对机器学习 ...

  7. Java套接字实现应用程序对数据库的访问

    最近在完成软件体系结构上机实验时,遇到一个有点点小难度的选做题,题目信息如下: 利用套接字技术实现应用程序中对数据库的访问.应用程序只是利用套接字连接向服务器发送一个查询的条件,而服务器负责对数据库的 ...

  8. CentOS7.X yum安装MySQL8.0 数据表不区分大小写切换默认存储路径

    查看当前系统版本的详细信息 # cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) yum源下载 地址:https://dev.m ...

  9. SC命令---安装、开启、配置、关闭windows服务 bat批处理

    一.直接使用cmd来进行服务的一些操作 1.安装服务 sc create test3 binPath= "C:\Users\Administrator\Desktop\win32srvDem ...

  10. 【原创】推流录屏软件OBS使用教程--录屏

    之前有录屏需要,写了一篇关于ffmpeg录屏的文章,反响还不错,但是直接用ffmpeg门槛有些高,今天写一篇图形界面的录屏推流工具OBS的使用教程.这次先写OBS的录屏教程 下载安装 点击 OBS官网 ...