zoukankan      html  css  js  c++  java
  • Docker 容器

    个人学习笔记,谢绝转载!!!
    原文:https://www.cnblogs.com/wshenjin/p/9547368.html


    启动容器

    启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态的容器重新启动。

    新建启动

    docker run

    常用选项:

    • -t:选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
    • -i:则让容器的标准输入保持打开
    • -d:以后台方式启动容器

    例如启动一个centos容器:

    [root@Docker_Machine_192.168.31.130 ~]# docker run -tid centos
    354861680ae5cdd0b807ad70f0968afa2a7717c8c55f0271cd76c95f905cf4ae
    [root@Docker_Machine_192.168.31.130 ~]# docker ps -a
    CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                    PORTS                      NAMES
    354861680ae5        centos                     "/bin/bash"              4 seconds ago       Up 4 seconds                                         competent_jang
    

    容器启动后回到docker host 的终端并 返回该容器的 ID。

    当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

    • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
    • 利用镜像创建并启动一个容器
    • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
    • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
    • 从地址池配置一个 ip 地址给容器
    • 执行用户指定的应用程序
    • 执行完毕后容器被终止

    其他常用的选项:

    • --name:指定容器名称,默认随机分配
    • -v, --volume:挂载volume
    • **--ip **:指定IP地址

    具体参考 docker run --help

    重启终止状态的容器

    docker start [id|name] 或者 docker container start [id|name]

    我们先停止刚刚创建的centos容器,再启动

    [root@Docker_Machine_192.168.31.130 ~]# docker stop 354861680ae5
    354861680ae5
    [root@Docker_Machine_192.168.31.130 ~]# docker start 354861680ae5
    354861680ae5
    [root@Docker_Machine_192.168.31.130 ~]# docker ps -a             
    CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                    PORTS                      NAMES
    354861680ae5        centos                     "/bin/bash"              8 minutes ago       Up 8 seconds                                         competent_jang
    

    docker stop [id|name] 或者 docker container stop[id|name] 命令停止正在运行的容器,用docker start [id|name] 或者 docker container start [id|name]命令停止终止状态的容器

    查看容器

    docker container ls 或者docker ps

    查看运行中的容器docker container ls 或者docker ps

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
    354861680ae5        centos              "/bin/bash"              14 minutes ago      Up 6 minutes                                   competent_jang
    034b2c372153        registry            "/entrypoint.sh /etc…"   3 weeks ago         Up About an hour    127.0.0.1:5000->5000/tcp   musing_shockley
    

    查看所有的容器docker container ls -a 或者docker ps -a

    CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                    PORTS                      NAMES
    354861680ae5        centos                     "/bin/bash"              14 minutes ago      Up 6 minutes                                         competent_jang
    58a473f60b3c        my_redis_server:v3.2.7     "/usr/local/redis/bi…"   6 days ago          Exited (255) 6 days ago   6001/tcp                   infallible_meitner
    1c8a8bbf61e9        centos                     "/bin/bash"              7 days ago          Exited (255) 6 days ago                              zealous_bose
    277daebf58a7        my_nginx_server:v1.13.11   "/usr/local/nginx/sb…"   12 days ago         Exited (255) 6 days ago   80/tcp                     inspiring_heisenberg
    75d87a4c17a0        centos                     "/bin/bash"              13 days ago         Exited (255) 6 days ago                              wonderful_goodall
    034b2c372153        registry                   "/entrypoint.sh /etc…"   3 weeks ago         Up About an hour          127.0.0.1:5000->5000/tcp   musing_shockley
    

    终止容器

    docker stop [id|name]docker container stop[id|name]

    [root@Docker_Machine_192.168.31.130 ~]# docker container  stop 354861680ae5
    354861680ae5
    

    此外,当 Docker 容器中应用终结时,容器也自动终止。

    进入容器

    docker attachdocker exec

    常用的方式:

    docker exec -it <container> bash|sh
    

    attach 与 exec 主要区别:

    1. attach 直接进入容器 启动命令 的终端,不会启动新的进程。
    2. exec 则是在容器中打开新的终端,并且可以启动新的进程。
    3. 如果想直接在终端中查看启动命令的输出,用 attach;其他情况使用 exec。

    容器导出导入

    导出

    docker export

    [root@Docker_Machine_192.168.31.130 ~]# docker ps 
    CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                      NAMES
    58a473f60b3c        my_redis_server:v3.2.7   "/usr/local/redis/bi…"   6 days ago          Up About a minute   6001/tcp                   infallible_meitner
    [root@Docker_Machine_192.168.31.130 ~]# docker export 58a473f60b3c > my_redis_server:v3.2.7.tar 
    
    导入

    docker importdocker load

    [root@Docker_Machine_192.168.31.130 ~]# cat  my_redis_server:v3.2.7.tar  | docker import - me/my_redis_server:v3.2.7 
    sha256:a2d3c452841fac44bd6bed3006f48dca2e5f5e68b76d207fd14619063fc251e6
    [root@Docker_Machine_192.168.31.130 ~]# docker images
    REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
    me/my_redis_server   v3.2.7              a2d3c452841f        3 seconds ago       281MB
    

    不用**docker import my_redis_server:v3.2.7.tar **直接导入,是因为本地镜像库已经有了my_redis_server:v3.2.7 这个镜像了。

    importload区别:

    save只能对image用,产生的文件需要用load来生成image
    export的对象是container,产生的文件需要用import来生成image

    想要清楚的了解docker loaddocker import命令的区别,就必须了解镜像与容器的区别:

    • 镜像:用来启动容器的只读模板,是容器启动所需的rootfs,类似于虚拟机所使用的镜像。
    • 容器:Docker 容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。

    镜像是容器的基础,可以简单的理解为镜像是我们启动虚拟机时需要的镜像,容器时虚拟机成功启动后,运行的服务。

    想要了解docker loaddocker import命令的区别,还必须知道docker savedocker export命令:

    • docker save images_name:将一个镜像导出为文件,再使用docker load命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比docker export命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。
    • docker export container_id:将一个容器导出为文件,再使用docker import命令将容器导入成为一个新的镜像,但是相比docker save命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。
  • 相关阅读:
    Remove menucool tooltip trial version
    笔记:Linux(AWS Redhat)开机启动workman进程(/etc/rc.local必须是755权限)
    workman项目设置开机自启动
    Linux应用之crontab定时任务的设置
    在aws ec2上使用root用户登录
    date_default_timezone_set()问题解决方案(PHP5.3以上的)
    Potatso Lite:[限免]ios 自由上网利器
    5+ App开发入门指南
    Nginx或Apache通过反向代理配置wss服务
    phpstudy安装redis
  • 原文地址:https://www.cnblogs.com/wshenjin/p/9547368.html
Copyright © 2011-2022 走看看