zoukankan      html  css  js  c++  java
  • 腾讯云CentOS 7.6 64位之docker的镜像和容器练习

    本文使用的Docker是社区版,版本是19.03.2,这个版本是本文写时的最新版。

    首先总结下容器和镜像的概念:

      容器是用镜像创建的,一个镜像可以创建多个容器。没有镜像就没有容器,但是没有容器还是可以有镜像。

      一般来说,一个容器就是一个应用,把应用在容器中运行称之为应用容器化

      删除镜像的时候,如果由这个镜像创建的容器还存在则会删除失败。

      容器和镜像的关系就是:容器是镜像的实例化的可运行实体

    以下是我的练习内容:

    1. 拉取镜像
      docker pull centos:latest
      或者按照版本拉取:docker pull centos:7.6

    2. 查看所有已经拉取的镜像
      docker images

    3. 通过镜像启动容器并且进入其中
      docker container run -it 0f3e07c0138f /bin/bash
      0f3e07c0138f是你镜像的ID,通过"docker images"命令查看获得

    4. 退出容器返回到主机
      使用Ctrl-PQ组合键(这只是退出命令界面而已,不会杀死容器进程。)

    5. 查询下当前运行中的容器情况
      docker container ls

    6. 连接到运行中的容器
      docker container exec -it dreamy_cartwright bash
      dreamy_cartwright是容器的名字,通过"docker container ls"命令查看获得

    7. 销毁容器
      停止容器运行:docker container stop dreamy_cartwright
      删除容器:docker container rm dreamy_cartwright
      查看所有状态的容器(包括停止状态的容器):docker container ls -a
      没有查到说明已经被删除了

    7.1 删除镜像
      删除刚刚拉取的镜像:docker image rm 0f3e07c0138f
      0f3e07c0138f是你镜像的ID,通过"docker images"命令查看获得
      注意:
        只有没有被容器使用的镜像才能被删除
        也可直接删除所有没被容器使用的镜像:docker image prune -a

    8. 上传并运行一个nodejs工程
      上传文件首先需要安装:yum install lrzsz
      如果出现是否需要安装请键盘输入Y然后回车
      创建目录:mkdir -p /home/demo/nodejs-docker
      下载安装SecureCRT,在SecureCRT中连接后输入:cd /home/demo/nodejs-docker
      上传文件输入命令:rz
      然后双击这个文件夹再点击确定,上传成功后可以使用命令查看:ls -a
      安装zip解压缩软件:yum install unzip zip
      执行解压命令:unzip psweb-master.zip
      删除掉之前的zip文件:rm -f psweb-master.zip

        备注:

          nodejs工程文件及SecureCRT下载地址:https://pan.baidu.com/s/1NprxpW5LIHySWTijMByx6g 提取码:ju8e

          双击SecureCRTPortable.exe可运行SecureCRT。

          这个部分其实只有rz这个命令需要用到SecureCRT,其他部分我都用腾讯云自带的WebShell了。

    9. 在Docker的容器中运行nodejs-demo
      切换到Dockerfile所在的目录:cd /home/demo/nodejs-docker/psweb-master
      打包成Docker镜像:docker image build -t test:latest .
      然后使用docker image ls命令查看到有test代表就是成功了
      运行镜像:docker container run -d --name web1 --publish 8080:8080 test:latest
      命令行回到根目录:cd ~

    10. 运行一个容器,后台运行,不进入其中
      docker container run -d --name webserver -p 80:8080
      然后再输入:nigelpoulton/pluralsight-docker-ci
      -d代表后台运行

    11. 删除所有容器和镜像
      容器:docker container rm$(docker container ls -aq) -f
      镜像:docker image rm $(docker image ls -q) -f

    12. 查看容器的配置信息
      docker container inspect 容器ID

    13. 关于Dockerfile

      这个文件包含了对这个应用的描述,并且指导Docker完成构建。

      直接看Dockerfile文件里面的英文注释,那个里面写的比较清楚了。

      总结下这些关键字代表的含义

        FROM:应用运行在什么镜像上

        LABEL:这个容器的负责人

        RUN:在镜像中执行的命令

        COPY:将代码复制到镜像的某个位置中

        EXPOSE:记录应用使用的端口号

        ENTRYPOINT:容器启动后默认运行的程序

    14. docker服务操作

      显示服务状态:systemctl status docker.service

      列出服务层级和依赖关系:systemctl list-dependencies docker.service

      启动服务:systemctl start docker.service

      关闭服务:systemctl stop docker.service

      重启服务:systemctl restart docker.service

      设置服务自启动:systemctl enable docker.service

      禁止服务自启动:systemctl disable docker.service

      查看服务是否自启动:systemctl is-enabled docker.service

      列出系统所有服务的启动情况:systemctl list-units --type=service

      列出所有自启动服务:systemctl list-unit-files|grep enabled

    一般安装好了默认就是自启动的,然后这个“.service”字符是可以省略的。

    15. docker自启动

      因为重启系统后docker默认是不会自己启动的,所以需要自己设置。

        手动重启docker:systemctl restart docker.service

        手动重启容器:docker start 95d869369f92 f6d275d686ed

        docker设置为自动启动:systemctl enable docker.service

        docker内的容器设置为自启动:docker update --restart=always 95d869369f92 f6d275d686ed

        其中95d869369f92 f6d275d686ed是代表两个容器的id,如果只有一个就只需要写一个,多个就继续写多个。

        设置完成之后可以测试一下:

          重启:reboot

          这个时候如果用的WebShell会断开连接,等待一会然后按任意键如果重启完成就可以连上了。

          查看容器:docker container ls

          这个时候命令运行成功并且能看到你的镜像代表设置自启动成功了。

          如果这个命令执行失败代表docker没有设置自动,如果执行成功了但是容器是空的代表容器没有设置自启动(命令后面加-a可以看到所有包括停止运行的容器)。

  • 相关阅读:
    各种HTTP错误消息含义
    fastjson生成和解析json数据
    javascript性能优化
    js正则表达式test方法、exec方法与字符串search方法区别
    JavaScript中字符串的match与replace方法
    js 字符串indexof与search方法的区别
    JavaScript indexof方法
    JavaScript数组方法说明
    setTimeout模拟setInterval调用
    javascript forEach方法与jQuery each区别
  • 原文地址:https://www.cnblogs.com/cluyun/p/11623016.html
Copyright © 2011-2022 走看看