上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

Docker介绍、常用命令与操作

guduadmin11天前

Docker介绍、常用命令与操作

  • 学习前言
  • 为什么要学习Docker
  • Docker里的必要基础概念
  • 常用命令与操作
    • 1、基础操作
      • a、查看docker相关信息
      • b、启动或者关闭docker
      • 2、容器操作
        • a、启动一个镜像
          • i、后台运行
          • ii、前台运行
          • b、容器运行情况查看
          • c、日志查看
          • d、容器删除
          • 3、镜像操作
            • a、镜像拉取
            • b、查看已有镜像
            • c、镜像删除
            • d、将正在运行的容器保存为镜像
            • e、编译自己的镜像
              • i、Dockerfile.ds编写原则
              • ii、Dockerfile.ds组成
              • iii、Dockerfile.ds示例与编译镜像示例

                学习前言

                工作了一段时间,感觉Docker真的是一个很方便的工具,无论复现代码还是部署服务器,不用特别担心环境的错误。

                Docker介绍、常用命令与操作,在这里插入图片描述,第1张

                为什么要学习Docker

                从这么长时间使用Docker的情况来看,我认为学习Docker的主要原因便是它的方便。生产过程中有各种环境,如果每到一个服务器都进行环境的部署的话,不仅调试麻烦,实际上线的时候也会因为各种环境问题导致服务崩溃。

                当前市面上复刻环境的方法一般有两种:

                1、虚拟机技术,可以在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在 Windows 系统里面运行Linux系统,这样就可以运行任意的Linux应用。因此,我们保留了某个环境的镜像,就可以复刻环境了;

                2、容器技术,与虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境,但容器之间可以共享同一个操作系统。因此,假设我们都在Linux环境上,使用容器技术,无需模拟硬件设备,直接就使用另一个Linux环境的镜像即可;

                相比于虚拟机技术,容器技术无需模拟硬件设备,底层操作系统是共享的,因此容器技术更加轻量级。

                Docker基于容器技术,只需保留镜像,就可以在另外一个Linux操作系统中运行。

                而Docker的使用方式也很简单,一般在Linux环境下使用,拉取一个镜像,然后运行起来即可,而后的操作就和在正常的系统中操作一样。

                Docker里的必要基础概念

                Docker里的必要基础概念是镜像和容器:

                镜像(Image):利用Docker将运行的程序及其依赖库、函数库、配置等文件打包在一起,简单理解就是打包后的程序环境,开箱即用。称为镜像。

                容器(Container):镜像运行后形成的进程就是容器,一个系统可以运行多个容器,Docker会给容器进程做隔离,不同进程之间不可见。

                常用命令与操作

                1、基础操作

                a、查看docker相关信息

                查看docker版本信息。

                docker version
                

                显示docker系统的信息

                docker info
                

                b、启动或者关闭docker

                启动docker

                sudo service docker start
                

                关闭docker

                sudo service docker stop
                

                2、容器操作

                a、启动一个镜像

                开始运行docker镜像一般使用docker run。

                该命令有很多的参数,这里我们介绍一下最常用的部分参数

                -i,以交互模式运行容器,通常与 -t 同时使用
                -t,启动容器后,为容器分配一个命令行,通常与-i同时使用
                -v,目录映射,容器目录挂载到宿主机目录,格式: :<容器目录>
                -d,守护进程,后台运行该容器
                -p,指定端口映射,格式:主机(宿主)端口:容器端口
                --name "nginx-lb",容器名字
                -e --env username="ritchie",设置环境变量
                

                在这里我给几个例子,看情况进行复制使用即可:

                i、后台运行

                以后台模式运行一个容器,容器名字为test1,主机的8099端口对应容器环境的80端口,主机的444端口对应容器环境的443端口,默认包含两个环境变量TEST_ENV和TEST_ENV2,分别是1234和12345。

                docker run -d --name=test1 8099:80 -p 444:443 -e TEST_ENV=1234 -e TEST_ENV2=12345
                

                这样运行后,会返回一个容器id,此时我们可以通过下述指令进入容器。

                docker exec -it 容器id /bin/bash
                
                ii、前台运行

                以交互模式运行容器,容器名字为test2,主机的8099端口对应容器环境的80端口,主机的444端口对应容器环境的443端口,默认包含两个环境变量TEST_ENV和TEST_ENV2,分别是1234和12345。本地的/test目录,会挂载到容器的/soft目录中。

                docker run -i -t --name=test2 8099:80 -p 444:443 -e TEST_ENV=1234 -e TEST_ENV2=12345 -v /test:/soft
                

                需要注意的是,在离开该容器后,该容器会自动停止。注意,这里的容器只是停止不是销毁。

                如果想要容器在运行退出后自动销毁,不再次启动,则可以加上-rm指令,如下所示:

                docker run -i -t -rm --name=test2 8099:80 -p 444:443 -e TEST_ENV=1234 -e TEST_ENV2=12345 -v /test:/soft
                

                b、容器运行情况查看

                查看当前运行的容器

                docker ps
                

                查看全部容器

                docker ps -a
                

                查看全部容器及其占用的空间

                docker ps -as
                

                c、日志查看

                查看日志信息,-f代表Follow log output。

                docker logs -f 容器ID
                

                d、容器删除

                容器删除一般要先停止容器。

                docker stop命令会向运行中的容器发送一个SIGTERM的信号,然后停止所有的进程。

                docker stop 容器ID
                

                有些时候SIGTERM不太稳定,会被一些程序给捕捉掉,那么就需要使用docker kill。

                docker kill 命令向所有运行在容器中的进程发送了一个不友好的SIGKILL信号。(类似于kill -9)

                docker kill 容器ID
                

                容器停止后可以使用下述指令删除容器,这个命令只能对非运行态容器执行。

                docker rm 容器ID
                

                3、镜像操作

                a、镜像拉取

                没什么特别的,直接docker pull即可,下述指令会自动拉取docker中,ubuntu的最新镜像。

                其中ubuntu可理解为镜像地址名称,latest可理解为版本号。

                docker image pull ubuntu:latest
                

                b、查看已有镜像

                使用ls指令即可查看,和正常linux操作类似。

                docker image ls
                

                c、镜像删除

                使用docker rmi即可删除本地镜像。

                docker rmi
                

                d、将正在运行的容器保存为镜像

                有些同学可能在容器中做了一些修改,相对其进行保存,那么可以使用docker commit。

                docker commit 容器id 镜像名称
                

                e、编译自己的镜像

                编译自己的镜像需要基于Dockerfile:

                i、Dockerfile.ds编写原则
                • Dockerfile中使用的所有文件必须与Dockerfile文件在同一个父目录下;
                • Dockerfile中默认的相对路径是Dockerfile所在的目录;
                • Dockerfile中,如果一条指令可以写入一行,那么它必须写入一行,因为每条指令被视为一个层,层数越多执行效率就会变慢;
                • Dockerfile中,指令不区分大小写,但它们都大写(按照惯例);
                • Dockerfile非注释行的第一行必须是FROM;
                  ii、Dockerfile.ds组成

                  Dockerfile.ds一般是一个环境的编译文件,由多个部分组成。常用的指令有:

                  • FROM 基础镜像
                  • COPY 拷贝文件
                  • ADD 拷贝文件
                  • WORKDIR 设置工作目录
                  • ENV 设置环境变量
                  • RUN 运行指令

                    最开始一般是FROM一个基础镜像,比如ubuntu:lastest这这样

                    FROM :
                    

                    然后是拷贝本地的文件或者目录到镜像中。这个一般是使用COPY或者ADD命令。

                    # 拷贝一个文件
                    COPY testFile /opt/
                    # 拷贝一个目录
                    COPY testDir /opt/testDir
                    # 拷贝一个文件
                    ADD testFile /opt/
                    

                    然后是设置WORKDIR,这个WORKDIR指的是运行该镜像的基础目录,也就是一进来镜像所在的目录。

                    比如运行下列指令,那么此时在Dockers中,"./"指的就是/opt,进入docker时也会位于/opt。

                    WORKDIR /opt
                    

                    然后是设置镜像中的环境变量,使用ENV指令

                    ENV  
                    

                    有些时候我们需要在镜像构建时安装软件或者删除镜像中的文件,此时可以使用RUN指令。

                    RUN command1 && command2
                    
                    iii、Dockerfile.ds示例与编译镜像示例

                    将下述内容保存为一个Dockerfile.ds。在编译目录下,创建test.py和test2.py两个文件。

                    # 基于的基础镜像
                    FROM centos
                    # 维护者信息
                    MAINTAINER bubbliiiing
                    # ADD和COPY test.py和test2.py文件放在当前目录下
                    ADD test.py /usr/local/  
                    COPY test2.py /usr/local/  
                    # 可以理解为cd,此时/usr/local/为工作目录
                    WORKDIR /usr/local/
                    # 设置环境变量
                    ENV AAA BBB
                    # 执行以下命令,安装wget,下载redis,并解包。
                    RUN yum install wget \
                        && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
                        && tar -xvf redis.tar.gz
                    

                    使用下述指令即可开始编译,-t指的是编译后镜像的名称,-f用于指定Dockerfile。

                    docker build -t build_test:0.0.1 -f Dockerfile.ds .
                    

网友评论

搜索
最新文章
热门文章
热门标签