zoukankan      html  css  js  c++  java
  • Docker的容器操作

    启动一次性运行的容器

    入门级例子:从ubuntu:14.04镜像启动一个容器,成功后在容器内部执行/bin/echo ‘hello world’命令,如果当前物理机没有该镜像,则执行docker pull从Docker Hub获取镜像,执行成功后,容器立马停止
    #sudo docker runubuntu:14.04 /bin/echo 'Hello world'
    参数解释
    dockerrun:docker中的启动容器命令
    Ubuntu:镜像名称
    14:04:镜像TAG,如果不指定TAG,docker使用最新的发行版TAG:latest
    /bin/echo ‘Helloworld’:在容器内执行的命令 
    该命令执行过程
    l  如果本地有ubuntu这个image就从它创建容器,否则从公有仓库下载
    l  从image创建容器
    l  分配一个文件系统,并在只读的image层外面挂载一层可读写的层
    l  从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
    l  从地址池配置1个ip地址给容器
    l  执行你指定的程序,在这里启动一个/bin/bash

     

     

     

    启动交互模式容器

    以交互模式启动一个容器(具体参数意义请执行dockerrun --help)
    $ sudo docker run -t-i ubuntu:14.04 /bin/bash
    参数解释
    -t:开启一个终端
    -i:以交互模式运行

     

     

     

    启动后台模式容器

    以后台模式运行一个容器
    #sudo docker run -dubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1;done"
    参数解释
    -d:以后台Daemon方式运行,执行成功后会返回一个该容器的ID 
     
     

    以映射端口方式启动一个Web容器

    # sudo docker run -d -P training/webapp python app.py 
    参数解释
    -d:以后台Daemon方式运行,执行成功后会返回一个该容器的ID
    -P:端口映射,外部端口到容器端口的映射规则由docker负责
    -p:自己指定端口映射规则,格式为:-p 外部端口:容器端口
    通过docker ps -l,可以查看到其PORTS列的端口映射规则
    当然你也可以,手工指定端口映射规则来启动Web容器
    #sudo docker run -d -p 5000:5000 training/webapp pythonapp.py
    备注:-p 完整的参数为:-p ip:hostport:port,将当前物理机的ip的端口映射到容器的端口
     
    如果你想通过很快捷的方式查看容器的端口
    #sudo docker port 容器ID或容器名称
     

    查看容器的具体信息

    以JSON的格式返回容器的具体信息
    #sudo docker inspect容器ID或容器名称

    进入容器执行命令

    #sudo docker exec -it 容器ID /bin/bash
     
    备注:一般对运行着的后台容器,执行该命令。查看其容器内部的情况。

    查看容器的日志

    $sudo docker logs 容器ID或容器名称
     
    参数解释
    -f:以滚动的形式查看日志,类似于linux的tail -f XXX.log 
     

    退出当前容器

    $sudo exit  //在容器内部执行该命令(或crtl+D),一般在交互模式下退出当前容器
     
    备注:容器仍然运行着

    创建容器

    # sudo docker create--name ubuntContainer ubuntu:14.04 /bin/echo 'Hello world'

    重启容器

    #sudo docker restart 容器ID

    暂停容器

    #sudo docker pause 容器ID  //暂停
    #sudo docker unpause 容器ID //解除暂停

    停止容器

    $sudo docker stop 容器ID或容器名称
    #docker stop $(docker ps -q -a)  //一次性停止所有容器,慎用

    杀死容器

    $sudo docker kill 容器ID或容器名称

    删除容器

    $sudo docker rm 容器ID或容器名称   //删除容器,正在运行的容器不能删除
    #sudo docker rm $(docker ps -q -a)  //一次性删除所有容器,慎用
     

    单个主机间的容器访问

    下面我们通过mysql_server容器与mysql_client容器的互联来了解link
    Ø  创建mysql_server镜像,并生成一个容器
    #cd /
    #mkdir mysql_server
    #vi Dockerfile
    FROM centos:centos6
    MAINTAINER ningyougang "xxxx@qq.com"  
     
    RUN yum install -y mysql-server mysql  
     
    RUN /etc/init.d/mysqld start &&  
        mysql -e"grant all privileges on *.* to 'root'@'%' identified by'mysql';"&& 
        mysql -e"grant all privileges on *.* to 'root'@'localhost' identified by'mysql';"&& 
        mysql -u root-pmysql -e "show databases;" 
       
    EXPOSE 3306  
       
    CMD ["/usr/bin/mysqld_safe"]
     
    # sudo docker build -t ningyougang/mysql_server .  //生成镜像
    #sudo docker run --name=mysql_server -d -Pningyougang/mysql_server //生成mysql_server容器
    Ø  创建mysql_client镜像,并生成一个link到mysql_server的client容器
    #cd /
    #mkdir mysql_client
    #vi Dockerfile
    FROM centos:centos6 
    MAINTAINER ningyougang "xxxx@qq.com"  
       
    RUN yum install -y mysql
     
    #sudo docker build -t ningyougang/mysql_client .  //生成镜像
    #sudo dockerrun --name=mysql_client1 --link=mysql_server:db -t -i ningyougang/mysql_client/usr/bin/mysql -h db -u root -pmysq            //生成mysql_client容器
     
    参数解释
    --link:<name or id>:alias
     
    通过上面的命令,link中的别名(alias)db即是mysql_client连接mysql_server的连接串
     
    Ø  进入mysql_client研究其link的实现细节
    #sudo docker exec-it bfc6cb037165 /bin/bash    //以交互模式进入mysql_client容器内部
    [root@bfc6cb037165/]# env | grep DB  //查看与DB(也就是alias)相关的环境变量
    DB_NAME=/mysql_client2/db
    DB_PORT=tcp://172.17.0.25:3306
    DB_PORT_3306_TCP_PORT=3306
    DB_PORT_3306_TCP_PROTO=tcp
    DB_PORT_3306_TCP_ADDR=172.17.0.25
    DB_PORT_3306_TCP=tcp://172.17.0.25:3306
     
     [root@bfc6cb037165 /]#vi /etc/hosts
    172.17.0.27     bfc6cb037165      #docker生成的mysql_client的IP、域名
    172.17.0.25     db               #docker生成的mysql_server的IP、域名
     
    总结:可以发现docker在mysql_client内通过生成别名的环境变量和profile相关的主机和域名的配置,打通了客户端到服务器端的tcp连接通道,而对于上层的应用,不需要关注IP、端口这些细节,只需要通过别名来访问即可
  • 相关阅读:
    2020-03-12推荐阅读链接
    一问带你区分清楚Authentication,Authorization以及Cookie、Session、Token
    Alibaba-技术专区-开源项目之Nacos源码分析
    Alibaba-技术专区-开源项目之Nacos功能特性
    Alibaba-技术专区-开源项目之Nacos环境准备
    Java-技术专区-javaAgent(插桩,attach)
    SkyWalking 6.x 源码分析 —— 调试环境搭建 (非原创)
    SkyWalking 6.2-Docker-Compose搭建单体
    Zookeeper-技术专区-配置以及学习
    Java-技术专区-设计模式-reactor模式
  • 原文地址:https://www.cnblogs.com/lexiaofei/p/7172200.html
Copyright © 2011-2022 走看看