首页 > 其他分享 >docker入门学习

docker入门学习

时间:2023-04-20 20:15:00浏览次数:47  
标签:容器 RUN 入门 -- 学习 镜像 docker ID

第一部分

一、docker简介

docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化容器时完全使用沙箱机制,互相之间不会有任何接口(类似IPhone的app),更重要的时容器性能开销极低。

二、docker应用场景

  • Web 应用的自动化打包和发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 自动化测试和持续集成、发布。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

三、docker概念

  • 镜像(Image):用于创建docker容器的模板,相当于一个root文件系统。
  • 容器(Container):镜像是静态的定义,容器时镜像运行时的实体。容器时独立运行的一个或一组应用,容器可以被创建、启动、停止、暂停等。
  • 仓库(Repository):仓库可以看成一个代码控制中心,用来存放镜像。
    docker使用客服端-服务端(C/S)架构模式,使用远程API来管理和创建docker容器,docker容器通过docker镜像来创建。

四、docker大体工作流程

  1. 下载docke
  2. 启动docker
  3. 下载镜像到本地
  4. 启动docker容器

五、 centos安装docker

  • 使用官方安装脚本自动安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  • 使用国内daocloud一键安装命令
curl -sSL https://get.daocloud.io/docker | sh
  • 手动安装
    1. 卸载旧版本
    yum remove docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-engine
    
    1. 使用docker仓库进行安装
    yum install -y yum-utils \ 
    device-mapper-persister-data \
    lvm2
    
    1. 设置稳定仓库(阿里云)
    yum-config-manager \
    --add-repo \ 
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    1. 安装docker engine-community
    yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    
    1. 安装特定版本的docker
    yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
    
    1. 启动docker
    systemctl start docker
    systemctl enable docker
    
    1. docker镜像加速
      在/etc/docker/daemon.json中写入如下内容(如果文件不存在则新建该文件)
    {"registry-mirrors":["https://reg-mirror.qiniu.com/"]}
    systemctl daemon-reload
    systemctl restart docker```
    
    

六、docker特性

  • 文件系统隔离
  • 网络隔离
  • 日志记录
  • 交互式shell
  • 资源隔离

第二部分

docker入门命令

  1. 帮助命令
docker version         #显示docker详细信息
docker info            #显示docker的系统信息,包括镜像和容器的数量
docker --helo          #显示docker帮助手册
  1. 镜像命令
docker search ubuntu   #搜索镜像名为ubuntu的镜像
docker pull ubuntu     #从仓库拉取名为ubuntu镜像,默认拉取最新版本
docker images          #查看已拉取的镜像
docker rmi 镜像名 [标签]      #删除镜像
docker rmi -f ${docker images -qa}        #删除全部镜像
docker save -o /xxx/xx.tar    #报错镜像为tar包
docker load -i  /xxx/xx.tar   #导入镜像
docker tag  镜像名:版本   新镜像名:版本    #复制镜像并且修改名称
docker commit -a 'xxx' -c 'xxx' 镜像ID 名字:版本   #提交镜像
-a:提交的镜像作者
-c:使用docker指令来创建镜像
-m:提交时说明文字
  1. 容器命令
docker run [可选参数] image   #启动容器
-d:以后台方式运行并且返回ID
-i:使用交互式运行容器,通常与t同时使用
-p:指定容器端口 容器端口:物理机端口
-P:随机指定端口
-v:给容器挂载存储卷
docker ps -a             #列出所有容器(不加-a就是正在运行的)
docker kill 容器实例ID   #杀掉容器
docker rm 容器实例ID     #删除容器(正在运行容器不能删除,除非加-f选项)
docker start 容器实例ID  #启动容器 
docker stop  容器实例ID  #停止正在运行的容器
docker top  容器实例ID   #查看容器内进程
docker restart 容器实例ID #重启容器
  1. 部署Nginx
  • docker search nginx
  • docker pull nginx
  • docker images
  • docker run -d --name nginx01 -p 80:80 nginx #启动容器
  • docker ps #查看容器
  • docker exec -it 容器ID /bin/bash
  1. 导出和导入容器
  • 导出容器
docker export 容器ID > 目录文件名
  • 导入容器
cat 容器名 | docker import - test/ubuntu:v1

img

img

小实例

  1. 载入镜像
docker pull training/webapp
  1. 启动镜像
#使用随机端口
docker run -d -P training/webapp python app.py
-d:让容器在后台运行
-P:将容器内部使用的网络端口随机映射到我们的主机上

#指定端口
docker run -d -p 5000:5000 tarining/webapp python app.py
  1. 查看运行容器
docker ps
  1. 查看网络端口
docker port 容器ID
docker port 容器名称
  1. 查看WEB应用程序日志
docker logs -f 容器ID

img

  1. 停止和重启容器
docker stop 容器ID
docker ps -a
docker start 容器ID  
docker restart 容器ID
  1. 删除容器(删除时容器要处于停止状态)
docker rm 容器ID

小妙招:

docker stop $(docker ps -q)   #停止所有容器
docker rm $(docker ps -aq)    #删除全部容器
docker stop $(docker pa -q) & docker rm $(docker ps -aq)  #一条命令搞定所有
docker rmi -f $(docker images -aq)

docker容器互联

docker有一个连接系统允许将多个容器连接在一起,共享连接信息,docker连接会创建一个父子关关系,其中父容器可以看出子容器的信息。

  1. 新建网络
docker network create -d bridge test-net
-d:参数指定docker网络类型,有bridge、overlay
  1. 连接容器
docker run -itd --name test1 --network test-net ubuntu /bin/bash
docker run -itd --name test2 --network test-net ubuntu /bin/bash
通过ping说明test1和test2,来证明建立互联关系。
  1. 设置DNS
    可以在宿主机的/etc/docker/daemon.json文件中增加dns配置实现全部容器的DNS
{
  "dns" : [
    "114.114.114.114",
    "8.8.8.8"
  ]
}
docker run -it --rm  ubuntu  cat etc/resolv.conf  #查看是否生效

#手动指定容器配置
docker run -it --rm -h host_ubuntu  --dns=114.114.114.114 --dns-search=test.com ubuntu
参数说明:
--rm:容器退出时自动清理容器内部的文件系统。
-h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。
--dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
--dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。

第三部分

  1. 什么是dockerfile?
    dockerfile是一个用来构建镜像的文本文件,文件内容包含一条条构建镜像所需的指令和说明。

  2. 使用dockerfile定制镜像(构建好的镜像内会有一个/usr/share/nginx/html/index.html文件)
    在一个空目录下,新建一个名为dockerfile的文件,并在文件内提交以下内容:

FROM nginx
RUN echo "这是一个本地构建的nginx镜像"> /usr/share/nginx/html/index.html
  1. FROM和RUN指令的作用
    FROM:定制的镜像都是基于FROM的镜像,这里的nginx就是定制需要的基础镜像。后续的操作都是基于nginx
    RUN:用于执行后面跟着的命令行命令。有两种格式

shell格式:

RUN <命令行命令>
#<命令行命令>等同在终端操作的shell命令

exec格式:

RUN ["可执行文件","参数1","参数2"]
#例如
#RUN ["./test.php","dev","offline"]等价于RUN ./test.php dev offline

注意:dockerfile的指令每执行一次都会在docker上新建一层,所以过多无意义的层,会造成镜像膨胀过大。例如:

FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://doenload.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

#会创建3层镜像,可简化为以下格式

FROM centos 
RUN yum -y install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"\
&& tar -xvf redis.tar.gz
#以上,使用&&符号连接命令。只会创建1层镜像
  1. 创建镜像
    在dockerfile文件的存放目录下,执行构建动作,如以下,通过目录下的dockerfile构建一个nginx:v3(镜像名称:镜像标签)。
    :最后的.代表本次执行的上下文路径
    docker build -t nginx:v3
    上下文路径,是指docker在构建镜像,有时候想要使用到本机的文件(比如复制),docker build命令得知这个路径后,会将路径下的所有内容打包。
    解析:由于docker的运行模式是C/S。我们本机是C,docker引擎是S。实际的构建过程是在docker引擎下完成的,所有这个时候无法用到我们本机的文件。这就需要我们把我们本机的指定目录下的文件引擎打包提供给docker引擎使用。
    如果未说明最后一个参数,那么默认上下文路径就是dockerfile所在的位置。
    注意:上下文路径不要放无用的文件,因为会一起打包发送给docker引擎,如果文件过多会造成过程缓慢。

  2. 指令详解
    dockerfile 的命令摘要

    FROM- 镜像从那里来

    MAINTAINER- 镜像维护者信息

    RUN- 构建镜像执行的命令,每一次RUN都会构建一层

    CMD- 容器启动的命令,如果有多个则以最后一个为准,也可以为ENTRYPOINT提供参数

    VOLUME- 定义数据卷,如果没有定义则使用默认

    USER- 指定后续执行的用户组和用户

    WORKDIR- 切换当前执行的工作目录

    HEALTHCHECH- 健康检测指令

    ARG- 变量属性值,但不在容器内部起作用

    EXPOSE- 暴露端口

    ENV- 变量属性值,容器内部也会起作用

    ADD- 添加文件,如果是压缩文件也解压

    COPY- 添加文件,以复制的形式

    ENTRYPOINT- 容器进入时执行的命令

制作镜像并且发布

  1. 注册docker hub账号(http://hub.docker.com/)
  2. 本机终端登录docke hub用户
docker login  -u [账号名字]    #登录命令
docker out       #退出
docker push 账号/容器名字:版本号     #发布镜像到docker hub 
  1. 在一个空目录下,新建一个名为Dockerfile文件,该文件夹内容如下
FORM centos:6.7                     #基础镜像
MAINTAINER jjk "[email protected]"      #作者信息
ENV MYPATH /usr/local            #环境变量
WORKDIR $MYPATH                  #指定默认工作目录
RUN yum -y install vim           #构建时安装vim
RUN yum -y install net-tools     #构建时安装ifconfig
EXPOSE 80                        #容器的端口
CMD echo #MYPATH
CMD echo "------------END-------------"
CMD /bin/bash
  1. 构建dockefile
docker build -f dockerfile -t  mycent:1.9 .
-f:dockerfile文件目录
-t:新镜像名:TAG

img

  1. 使用docker history查看dockerfile构建过程。
  2. 发送到docker hub
docker tag SOURCE_IMAGE[:TAG] 自己账号名字/镜像名   #更改镜像名
docker push  自己账号名字/镜像名                    #发送到docker hub

标签:容器,RUN,入门,--,学习,镜像,docker,ID
From: https://www.cnblogs.com/kalixcn/p/17338114.html

相关文章

  • 【第一章 web入门】afr_3——模板注入与proc文件夹
    【第一章web入门】afr_3——模板注入与proc文件夹题目来源n1book,buu上的环境看题url中提供了name参数,类似在路径中进行了文件名查询然后展示:随便输入一个数字:说明肯定题目要求我们利用这个文件读取漏洞。但是输入flag之后显示nopermission。所以尝试其他方法。proc......
  • PHP 教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介PHP开发入门教程-一个简单而简短的PHP教程和所有内置PHP函数的完整参考手册。本教程是为初学者和高级开发人员设计的。您将了解PHP内置函数,预定义变量示例,面向对象的PHP,数字,标量,数组,散列文件I/O,IF,ELSEIF,执行,循环,运算符,正则表达式,GET,POST,子程序,编码标准,模块,文件管理,套......
  • Java学习笔记(二)
    1.请描述标识符的命名规则答:(1)由26个英文字母大小写,数字,_或$组成。(2)不能以数字开头。(3)不能使用关键字和保留字(指已经定义过的变量),但是可以包含关键字和保留字。(4)严格区分大小写,无长度限制。(5)不能有空格。2.请描述数据类型存在的意义数据有明确的类型划分,为了确保变量保留的......
  • ASP.NET Core MVC 从入门到精通之wwwroot和客户端库
    随着技术的发展,ASP.NETCoreMVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NETCoreMVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NETCoreMVC系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NETCor......
  • Java学习笔记(一)
    1、JDK,JRE,JVM三者之间的关系、答:JDK是编译环境,集成了JRE和一些JAVA开发工具包。JRE是运行环境。JVM是一种平台软件,负责将字节码文件解释成机器码并提交操作系统执行。将.class文件解释并提交操作系统。2、为什么要配置环境变量配置环境变量:为了在系统中的任何位置都可以访问jdk......
  • Linux入门二
    目录一、磁盘管理二、文件挂载1.挂载方法2.挂载示例(1)挂载光盘镜像文件(2)挂载移动硬盘(3)挂载U盘(4)挂载Windows文件共享(5)挂载UNIX系统NFS文件共享(6)补充3.卸载已挂载的设备三、软硬链接四、nfs服务1.什么是NFS2.服务端配置NFS(1)配置(2)共享目录的权限(3)启动nfs服务3.客户端挂载NFS五、......
  • 时而实践、时而学习
    最近赋闲在家已经一个多月了,最后一天上班是3月16号周四,工作日算到14日。这次是解散了整个团队,因为这次算创业,新团队。细细一算,从我入职开始算,进入差不多9个月。虽然和大老板没什么沟通,但当时14日到16日我做的事情就是写总结。觉得还是不够,解不开心中的许多疑惑,为什么这两年我的职......
  • N1、Pytorch文本分类入门
    一、背景介绍¶本节是一个使用PyTorch实现的简单文本分类实战案例。在这个例子中,我们将使用AGNews数据集进行文本分类。AGNews(AG'sNewsTopicClassificationDataset)是一个广泛用于文本分类任务的数据集,尤其是在新闻领域。该数据集是由AG'sCorpusofNewsArticles收......
  • 4.20每日学习总结
    昨天完成了科技政策查询的修改和功能完善,今天打算继续与队友合作完成团队项目,遇到的问题是要做成理想的页面效果需要不断地尝试。 ......
  • docker-compose 安装使用教程
    1、下载二进制文件:curl-Lhttps://github.com/docker/compose/releases/download/v2.17.1/docker-compose-linux-x86_64  -o/usr/local/bin/docker-compose2、授权执行权限:    chmod+x/usr/local/bin/docker-compose3、查看版本:  docker-compose--version......