docker常用配置以及命令

  1. Docker基本概念

docker常用配置以及命令

1.1 什么是 docker hub

DockHub是一个仓库
https://hub.docker.com/

仓库是集中存放镜像文件的场所
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

  • docker拉取命令
    docker pull centos
  • docker 查看镜像
    docker images

1.2 什么是docker镜像?

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

docker常用配置以及命令
共享一个base镜像 但是base镜像不会被修改
只会修改单个容器内
这个用到了docker特性
docker常用配置以及命令

每当一个镜像被创建 就会创建一个可写层在上方
这个可写层又被称为容器层 容器层的下方统一叫镜像层

使用centos镜像创建一个容器

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

1.3 什么是容器

容器是一种轻量级,可移植,自包含的软件打包技术 ,是一种应用程序,可以
在九乎任何地方以相同的方式运行。
开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系
统的虚拟机,物理服务器或公有云主机上运行。

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

docker常用配置以及命令

1.4 docker容器的优势

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

1.5 docker容器是如何工作的

docker的核心组件包括:
docker客户端,docker服务器,docker镜像,registry,docker容器

1.6 docker客户端

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

docker常用配置以及命令

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

docker常用配置以及命令
6.1.7 docker 服务
Docker 服务是Docker最核心的后台进程,它负责响应来自Docker client的请求,然后将这些请求翻译成系统调用完成容器管理操作。
该进程会在后台启动一个API Server负责接收由Docker client发送的请求;接收到的请求将通过Docker 服务内部的一个路由分发调度,再由具体的西数来执行请求。
  1. 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常用配置以及命令

杀死进程

docker kill id

进入容器内部

docker attach id

docker常用配置以及命令

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

docker exec -it + 短id

docker常用配置以及命令

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 '' | awk '{print $3}'

清除所有无容器使用的镜像 注意,此命令只要是镜像无容器使用(容器正常运行)都会被删除,包括容器临时停止
docker system prune -a
  1. docker-appium的使用

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

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

sudo docker search appium

docker常用配置以及命令
然后 docker pull 镜像即可

sudo docker pull appium/appium

docker常用配置以及命令

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

  • 创建一个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

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://cr.console.aliyun.com/"
  ]
}
  • 重新加载配置文件并重启Docker。
  • sudo systemctl daemon-reload
  • sudo systemctl restart docker
  • 验证镜像源是否修改成功
  • sudo docker info
  • 查看docker 容器ip

    • docker inspect 容器ID | grep IPAddress
  • 自己提交一个镜像

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

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

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

docker pull tomcat

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

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

docker commit -a="leilei" -m="第一次打包镜像,打包后直接访问还会404吗" 231f2eae6896 tom:1.0
  1. 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 [选项]

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

这个时候就可以通过 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 'Hello,world' > /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

比如

RUN apt-get update
RUN apt-get install vim

就是创建了两层镜像 这样毫无意义
最大不能超过127层的
正确写法为:

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

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

Original: https://www.cnblogs.com/zichliang/p/16858698.html
Author: 始識
Title: docker常用配置以及命令

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/799158/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • PRML 基础知识

    本文地址:https://www.cnblogs.com/faranten/p/15880295.html转载请注明作者与出处 1 一个经典例子 ​ ​ ​ 一个经典的例子就是Po…

    Python 2023年10月28日
    040
  • Python数据分析之股票双均线策略制定

    Python数据分析之股票双均线策略制定 需求:双均线策略制定 库 tushare包 预处理数据 df = pd.read_csv(‘./maotai.csv’).drop(lab…

    Python 2023年8月21日
    068
  • 自己动手写线程池——向JDK线程池进发

    自己动手写线程池——向JDK线程池进发 前言 在前面的文章自己动手写乞丐版线程池中,我们写了一个非常简单的线程池实现,这个只是一个非常简单的实现,在本篇文章当中我们将要实现一个和J…

    Python 2023年10月18日
    052
  • NoveAI本地环境搭建、AI作画

    鉴于按照别人的教程安装过程中遇到各种问题,极其痛苦,所以还是自己也整理总结一份. 1 diffusion vs GAN 所谓扩散算法diffusion是指先将一幅画面逐步加入噪点,…

    Python 2023年9月30日
    053
  • 【CSS记录】隐藏式图文介绍框:鼠标放上后展示更多内容

    <!DOCTYPE html> <html> <head> </head> <body> <div class=&…

    Python 2023年6月3日
    071
  • matplotlib如何设置散点图中点的像素大小

    工作中遇到的问题:matplotlib如何设置点的像素大小,具体情况如下图。解决方法:将plot方法更换为scatter方法,然后就可以指定s(像素属性)的值了。 方法说明: pl…

    Python 2023年9月2日
    046
  • Python画图

    文章目录 需要导入的包 plt.plot()——折线图 plt.scatter()——散点图 plt.bar()——柱状图 plt.pie()——饼图 plt.pie()——圆环 …

    Python 2023年8月30日
    054
  • pandas的行列获取/pandas iloc和loc的使用/如何获取pandas的行和列

    由于平时没有系统的学习pandas,导致在实际应用过程中,对于获取df中的行和列经常出现问题,于是总结一下,供自己以后参考。 0 查看手册 请当你看完1-5的内容再来看该部分,用于…

    Python 2023年8月7日
    068
  • pygame入门2

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年9月23日
    036
  • 25~30K的学员面试考题,10分钟就写完?

    前言 今天的这个案例,是一位同学的面试题,人在国外,月薪25~30K本来以为是难度很大的反爬、逆向或者算法之类的,谁知道,就是一个很简单的爬虫 划重点,10分钟就写出来了 ; 案例…

    Python 2023年11月9日
    025
  • Matplotlib数据可视化基础

    1、Matplotlib基础绘图语法与常用参数 1.1、函数名称 函数名称函数作用plt.title在当前图形中添加标题,可以指定标题的名称、位置、颜色等参数plt.xlabel在…

    Python 2023年9月6日
    053
  • Pandas函数(2)

    一、描述性统计信息函数 #&#x521B;&#x5EFA;&#x4E00;&#x4E2A;DataFrame&#x6570;&#x6…

    Python 2023年8月22日
    044
  • python自动化办公

    一,xlwings的安装与使用 1,xlwings是什么 在日常生活中我们或多或少的都会跟Excel打交道,比如做销售统计,人力的考勤,学生的考试成绩等等,甚至在某些领域会涉及到批…

    Python 2023年11月2日
    051
  • Flask 学习-88. jsonify() 函数源码解读深入学习

    flask 有个jsonify() 函数,如果返回的是一个字典,那么调用 jsonify 创建一个响应对象。 视图函数的返回值会自动转换为一个响应对象。如果返回值是一个字符串,那么…

    Python 2023年8月15日
    044
  • Flask 之一蓝图Blueprint详解

    一、蓝图概述 蓝图:是flask提供的一种应用程序组织化的方法,类似的django的app,把不同功能分到不同文件,最后将这些文件汇总起来。 本质:将不同处理功能的代码分开放,再将…

    Python 2023年8月15日
    049
  • 轩小陌的Python笔记-Numpy

    一、定义 一个基于python的扩展库 提供高维数组对象ndarray,运算速度碾压python List 提供了各种高级数据编程工具,如矩阵运算、向量运算、快速筛选、IO操作、傅…

    Python 2023年8月25日
    055
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球