zoukankan      html  css  js  c++  java
  • 03 : docker

    docker 容器常见操作

    1: docker的容器管理命令详解:

    docker run -d -p 80:80 nginx:latest
    run(创建并运行一个容器)
    -d 放在后台
    -p 端口映射
    -v 源地址(宿主机):目标地址(容器)
    nginx:latest docker镜像的名字,最后一个版本

    运行一个centos,并进入容器终端:
    docker search centos 找到官方的centos镜像
    docker pull centos
    docker run -it --name centos centos /bin/bash
    -it 分配交互式的终端
    --name 指定容器的名字
    /bin/bash 进入容易后执行的命令,覆盖容器的初始命令

    运行后进入容器镜像终端:
    [root@4b3716037b2b /]# hostname -I
    172.17.0.2
    [root@4b3716037b2b /]# exit #退出容器即销毁
    临时退出容器不销毁方法:ctrl + p 然后松开,再按住ctrl +q


    查看容器列表
    docker ps #docker container ps (正在运行的容器)
    docker ps -a #docker container ps -a (所有运行过的容器,包括已经退出的)
    docker ps --no-trunc 显示全部,长格式显示

    [root@k8s129 ~]# docker run -d centos sleep 10 (使用后台方式启动容器,并直接一个命令sleep 10)
    651d87d5be24cca4f7a37a25f8d87266b9e8a8b4bcf724106d55bb2c4b030da9
    [root@k8s129 ~]# docker container ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    651d87d5be24 centos "sleep 10" 8 seconds ago Up 7 seconds compassionate_lumiere
    4b3716037b2b centos "/bin/bash" 14 minutes ago Exited (0) 12 minutes ago centos
    742f43349c54 nginx "nginx -g 'daemon of…" 13 hours ago Exited (0) 12 hours ago competent_allen
    [root@k8s129 ~]# docker container ps -a (10S过后这个容器就会结束退出了。)
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    651d87d5be24 centos "sleep 10" 2 minutes ago Exited (0) 2 minutes ago compassionate_lumiere
    4b3716037b2b centos "/bin/bash" 17 minutes ago Exited (0) 15 minutes ago centos
    742f43349c54 nginx "nginx -g 'daemon of…" 13 hours ago Exited (0) 12 hours ago competent_allen
    [root@k8s129 ~]# docker run -d centos (不指定,默认执行镜像制作时候指定的进程命令,比如centos镜像是/bin.bash , nginx镜像是nginx -g `daemon of.....`)

    正常停止容器:
    docker stop CONTAINER_ID或者NAMES

    [root@k8s129 ~]# docker ps (查看CONTAINER_ID或者NAMES)
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    1cbafd84c8b2 nginx "nginx -g 'daemon of…" 3 minutes ago Up 3 minutes 80/tcp relaxed_chaum
    [root@k8s129 ~]# docker stop 1cbafd84c8b2 或者docker stop relaxed_chaum
    relaxed_chaum
    [root@k8s129 ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    [root@k8s129 ~]#

    强制杀死容器:
    docker kill CONTAINER_ID或者NAMES

    删除容器 # 只能删除已经退出的容器,正在运行的容易需要先停止,才能删除 或者加-f 选项强制删除,不建议
    docker rm CONTAINER_ID或者NAMES
    docker rmi 是删除镜像,注意两者的区别
    批量删除容器
    docker rm -f `docker ps -a -q`#获取容器的ID号

    注意:docker容器内的第一个进程必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!

     

    进入容器:
    (目的,调试,排错)

    方法1:docker exec (会分配一个新的终端tty)
    docker exec -it 容器id或容器名字 /bin/bash

    [root@k8s129 ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    e067cb3fe22a centos "/bin/bash" 4 minutes ago Up 4 minutes heuristic_archimedes
    [root@k8s129 ~]# docker exec -it e067cb3fe22a /bin/bash (分配一个新的终端进入容器)
    [root@e067cb3fe22a /]# exit # ctrl + p 然后松开 在安装ctrl +q
    这两种方式退出,都不会停止容器,因为原终端还在运行。只是把新分配的终端退出了。

    方法2:docker attach(使用的是同一个终端,弃用了解就好,使用方法1 exec进入。)
    docker attach [OPTIONS] CONTAINER
    只能使用ctrl + p 然后松开 在安装ctrl +q退出容器,如果使用exit会直接销毁容器。


    2: docker容器的网络访问
    指定映射(docker 会自动添加一条iptables规则来实现端口映射)
    -p hostPort:containerPort
    -p ip:hostPort:containerPort
    -p ip::containerPort(随机端口)
    -p hostPort:containerPort:udp
    -p 81:80 –p 443:443 可以指定多个-p
    大 P 宿主机随机端口映射到容器端口:
    docker run -d -P nginx:latest

    3:docker的数据卷管理

    数据卷(文件或目录)
    -v src(创建的卷目录):dst(容器的目录)
    -v src(宿主机的目录): dst(容器的目录)
    第一种:把容器里面的文件,拷贝到卷中
    第二种:把宿主机的目录,挂载到容器的目录中

    第一种用法:
    [root@k8s129 ~]# docker volume create xujin #创建一个卷
    xujin
    [root@k8s129 ~]# docker volume ls # 查看
    DRIVER VOLUME NAME
    local xujin
    [root@k8s129 ~]# docker volume inspect xujin # 查看卷存放的位置
    [
    {
    "CreatedAt": "2019-10-20T18:28:22+08:00",
    "Driver": "local",
    "Labels": {},
    "Mountpoint": "/var/lib/docker/volumes/xujin/_data",
    "Name": "xujin",
    "Options": {},
    "Scope": "local"
    }
    ]
    #把刚才创建的xujin卷,挂到nginx 容器的数据目录下面(/usr/share/nginx/html)。
    [root@k8s129 ~]# docker run -d -p 80:80 -v xujin:/usr/share/nginx/html nginx
    9e9fb65dc865b2decfc57d85c622832554bcb1aa4fbabe7018c013c2c7c7becb
    [root@k8s129 ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    9e9fb65dc865 nginx "nginx -g 'daemon of…" 7 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp cocky_burnell
    [root@k8s129 _data]# cd /var/lib/docker/volumes/xujin/_data/
    [root@k8s129 _data]# ls
    50x.html index.html
    [root@k8s129 _data]# echo "我是新创建的xujin卷" >index.html #网页访问就会是我们刚才指定的内容了

    第二种:
    [root@k8s129 tools]# docker rm -f `docker ps -a -q` #删除所有容器
    9e9fb65dc865
    #启动nginx ,把本地的/tools目录(这个目录下面创建一个index.html文件)挂到nginx容器的/usr/share/nginx/html下
    [root@k8s129 tools]# docker run -d -p 80:80 -v /tools/:/usr/share/nginx/html nginx
    0a6b60ac3ec81aab2600fa68459a20cfc4e485beb2fc7cb88ecbe665add84f62
    [root@k8s129 tools]#

    思路扩展:指定多个IP端口映射,挂载多个目录。
    docker run -d -p 80:80 -p 81:81  -v /tools/xiaoniao.conf:/etc/nginx/conf/  -v  /tools/:/usr/share/nginx/html nginx

  • 相关阅读:
    Java设计模式
    一个接口多个实现类的Spring注入方式
    Mybatis 中的<![CDATA[ ]]>浅析
    方法内调另一个方法(事务)的探讨
    insertSql语句中的trim标签的使用
    Mybatis-plus的两种分页插件的配置方式
    Mybatis-plus的使用
    spring的IOC,DI及案例详解
    MySQL多表关联数据同时删除
    @Validated和@Valid区别
  • 原文地址:https://www.cnblogs.com/jim-xu/p/11708615.html
Copyright © 2011-2022 走看看