zoukankan      html  css  js  c++  java
  • Docker基本命令即操作

          Docker:是对应用的虚拟化,共享了底层宿主机的操作系统内核,是一种标准的应用程序打包、部署方式

          虚拟机技术:对整个操作系统的虚拟化,用于模拟完整的操作系统

          Docker在centos上的安装,Ubuntu上的安装可以参考Docker官网给的安装教程

    sudo yum install –y docker-io

          启动docker

    sudo systemctl start docker

          搜索docker镜像

    sudo docker search centos

          获取镜像

     sudo docker pull centos

          查看镜像

    sudo docker images

          删除镜像 

    sudo docker rmi <镜像名称>

          启动容器

    sudo docker run --name –h hostname

          列如启动一个‘Hello world’镜像为centos的docker容器

    sudo docker run centos /bin/echo ‘Hello world’

          启动自定义名称的docker容器,并进入到容器里面

    sudo docker run --name mydocker -it centos /bin/bash

          启动已经创建好的docker容器

    sudo docker start <容器ID>

          启动docker容器,并让其在后台运行

    sudo docker run -d --name mynginx nginx

          交互型容器:运行在前台,通常会指定有交互的控制台,可以给容器输入,也可以得到容器的输出

    sudo docker run -it --name <容器名称> <镜像> /bin/bash

          守护型容器:运行在后台,创建启动之后就与终端无关

    sudo docker run -d --name <容器名称> <镜像> /bin/bash

          获取容器PID

    sudo docker inspect --format “{{.State.Pid}}” <容器ID/容器名称>

          进去正在运行的容器,其中pid、net、ipc、mount、uts分别表示容器的进程、网络、消息、文件系统和主机名

    sudo nsenter --target <容器PID> --mount --uts --ipc --net --pid

          停止容器

    sudo docker stop CONTAINER ID

          查看当前正在运行的容器

    sudo docker ps

          查看所有容器,包括运行和停止的

     sudo docker ps -a

          查看最新创建的容器

    sudo docker ps -l

          查看最后创建的x个容器

    sudo docker ps -n=x

          删除容器

    sudo rm CONTAINER ID

          Docker没有提供一次性删除所有容器的命令,但是可以用下面的命令来实现这个目的

    sudo docker rm ‘docker ps -a -q’

          这个命令会用docker ps列出当前的所有容器,-a标志列出所有容器,-q标志只列出容器的ID,不包括容器的其他信息。然后将这个列表传给docker rm命令,依次删除容器

          编写进入容器脚本in.sh

    vim in.sh
    #!/bin/bash
    CNAME=$1
    CPID=$(sudo docker inspect --format "{{.Status.Pid}}" $CNAME)
    sudo nsenter --target "$CPID" --mount --uts --ipc --net --pid

          赋予脚本可执行权限

    sudo chmod u+x in.sh

          进入容器只需 ./in.sh <主机名>

          查看网桥情况,可以看出网络中是有docker的网桥的

     brctl show

          查看防火墙规则,同样网络中含有docker的防火墙规则

    sudo iptables -L

          随机映射

    sudo docker run -P
    sudo docker run -d -P --name mynginx1 nginx

          指定映射

    sudo docker run -p hostPort:containerPort
    sudo docker run -p ip:hostPort:containerPort
    sudo docker run -p ip::containerPort
    sudo docker run -d -p 91:80 --name mynginx2 nginx

          通过nginx在容器中部署静态网站

    sudo docker run -it -p 80 --name web ubuntu /bin/bash 
    root@425c7a0e6949:/# apt-get update
    root@425c7a0e6949:/# apt-get install nginx
    root@425c7a0e6949:/# apt-get install vim
    root@425c7a0e6949:/# mkdir -p /var/www/html
    root@425c7a0e6949:/# cd /var/www/html/
    root@425c7a0e6949:/var/www/html# vim index.html
    root@425c7a0e6949:/var/www/html# whereis nginx
    nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
    root@425c7a0e6949:/var/www/html# ls /etc/nginx/
    root@425c7a0e6949:/var/www/html# ls /etc/nginx/sites-enabled/
    root@425c7a0e6949:/var/www/html# vim /etc/nginx/sites-enabled/default(将root后的目录改为自己创建的静态网站的目录)
    root@425c7a0e6949:/var/www/html# cd
    root@425c7a0e6949:~# nginx
    root@425c7a0e6949:~# ps -ef

          在宿主机查看正在运行的容器,可以看到容器映射的端口信息

    sudo docker ps

          也可以直接查看容器映射的端口号和容器内进程

    sudo docker port web
    sudo docker top web

          可以在通过宿主机本地IP加上端口号查看所创建的网页,也可以直接通过容器IP查看,当然也可以在浏览器里面直接输入IP地址

    curl http://127.0.0.1:<端口号>
    curl http://172.17.0.2

          使用commit构建镜像

    sudo docker commit <容器名称/容器ID> <镜像名称>

          使用Dockerfile构建镜像

    mkdir -p dockerfile/df_test1
    cd dockerfile/df_test1
    vim dockerfile
    #First dockerfile for test
    FROM ubuntu
    MAINTAINER(维护人信息)
    RUN apt-get update
    RUN apt-get install nginx
    EXPOSE 80
    sudo docker build -t=<镜像名称> 

          Dockerfile的指令

    # 后面跟着注释的内容

    INSTRUCTION argument <指令以大写的指令名开头,后面跟指令的参数>

    FROM <镜像名> (已经存在的镜像,也成为基础镜像,必须是Dockerfile中第一条非注释指令)

    MAINTAINER <name> (指定镜像的作者信息,包含镜像的所有者和联系信息)

    RUN <command>

    EXPOSE <port> (指定该镜像运行的容器使用的端口)

          Dockerfile构建过程

    从基础镜像运行一个容器

    执行一条指令,对容器作出修改

    执行类似docker commit的操作,提交一个新的镜像层

    再基于刚提交的镜像运行一个新的容器

    执行Dockerfile中的下一条指令,直至所有指令执行完毕

          commit构建镜像实例

    对镜像进行升级
    root@e8730dd51d57:/# apt-get update
    
    安装网络工具
    root@e8730dd51d57:/# apt-get install net-tools
    
    安装Ping工具
    root@e8730dd51d57:/# apt-get install iputils-ping
    
    sudo docker commit <容器ID> 名字/镜像

          再用sudo docker images去查看可以发现多处了镜像 

          在另外一个终端中进入已经运行的容器

    sudo docker attach <容器ID>
    sudo docker exec -it <容器ID> /bin/bash

          利用docker logs命令来查看容器日志,其中-f标志可以查看实时日志,-t标志可以日志产生的时间,也可以用--tail标志来指定查看日志的最后部分

    sudo docker run -d --name logs ubuntu /bin/sh -c "while true;do echo Hello world;sleep 1;done"
    sudo docker logs -t logs
    sudo docker logs -f logs
    sudo docker logs -t -f --tail=0 logs

          查看容器内进程

    sudo docker top <容器名称>

          查看docker守护进程

    sudo ps -ef | grep docker

          启动停止docker守护进程

    sudo service docker start
    sudo service docker stop
    sudo service docker restart

          修改docker0默认分配的ip地址

    sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0 
    sudo service docker restart

          添加虚拟网桥

    sudo ovs-vsctl add-br br0
    sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0

          更改docker守护进程的启动配置:

    /etc/default/docker中添加DOCKER_OPTS值  -b=br0

          拒绝所有容器间互联

    /etc/default/docker中添加DOCKER_OPTS值  --icc=false,然后再用重启docker守护进程

    sudo vim /ect/default/docker
    DOCKER_OPTS=”--icc=false”
    sudo service docker restart

          允许特定容器间的连接

    Docker守护进程的启动选项

    --icc=false --iptables=true

    --link 在容器启动时添加link

    docker利用iptables中的机制,在icc=false时,阻断所有的docker容器间的访问,仅仅运行利用link选项配置的容器进行相互的访问

          查看docker网络

    sudo docker network ls
    sudo docker network inspect <网络类型>

          建立自己的网络

    sudo docker network create --driver bridge mynet

          让容器运行在自己创建的网络中

    sudo docker run -it --network=mynet --name <容器名称> <镜像>

          数据卷是经过特殊设计的目录,可以绕过联合文件系统,为一个或多个容器提供访问

          数据卷的设计目的,在于数据的永久化,它完全独立于容器的生成周期,因此,docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾手机机制,对容器引用的数据卷进行处理

          数据卷的特点

        (1)数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中

        (2)数据卷可以在容器之间共享和重用

        (3)可以对数据卷里的内容直接进行修改

        (4)数据卷的变化不会影响镜像的更新

        (5)卷会一直存在,即使挂载数据卷的容器已经被删除

          为容器添加数据卷

          在用docker run命令的时候,使用-v标记来添加一个数据卷。在一次run中多次使用可以挂载多个数据卷,下面加载一个卷到web容器上

    sudo docker run -it --name web -v /web ubuntu /bin/bash

          web是容器中的目录,目录不存在会重新创建

          挂载一个主机目录作为数据卷

    sudo docker run -it --name web -v /opt/web:/web ubuntu /bin/bash

          为数据卷添加访问权限为只读

    sudo docker run -it --name web -v /opt/web:/web:ro ubuntu /bin/bash

          挂载一个宿主主机文件作为数据卷

    sudo docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

          创建一个容器数据卷

    sudo docker run -itd -v /logdata --name logdata ubuntu

          在其他容器中挂载logdata容器的数据卷

    sudo docker run -itd --name web1 --volumes-from logdata ubuntu
    udo docker run -itd --name web2 --volumes-from logdata ubuntu

          备份

    sudo docker run --volumes-from logdata -v /containet_backup:/backup ubuntu tar cvf /backup/backup.tar /data

          恢复

          先创建一个数据卷

    sudo docker run -v /data --name logdata2 ubuntu

          再将备份文件恢复到这个数据卷容器

    sudo docker run --volumes-from logdata2 -v /container_backup:/backup ubuntu tar xvf /backup/backup.tar

          最后启动一个容器挂载验证/data目录数据恢复成功

    sudo docker run -itd --volumes-from logdata2 --name web_recover ubuntu

          迁移容器和镜像

          先创建测试容器

    sudo docker exec web touch /opt/test.txt
     sudo docker exec web ls /opt

          执行导出

    sudo docker export web > web.tar

          执行导入

    cat web.tar | sudo docker import - web:v2

          启动容器

    sudo docker run -itd --name web_v2 web:v2 /bin/bash

          进入容器查看

     sudo docker exec web_v2 ls /opt

          导出

    sudo docker save web > web.tar

          导入

     sudo docker load < web.tar
  • 相关阅读:
    H公司以及我的目标
    新的起点
    apache服务器配置Net的实践
    会计简要学习
    二、MongoDB的简单增删改查
    一、MongoDB安装与启动
    KnockOutJs初次体验
    DevExpress 全体窗口换肤的功能 winform
    DevExporess 右键菜单的实现
    使用gridControl gridview总结
  • 原文地址:https://www.cnblogs.com/chenjin2018/p/9795707.html
Copyright © 2011-2022 走看看