zoukankan      html  css  js  c++  java
  • Docker使用

    ###首先我们先要对docker有一个了解:Docker是一个开源的容器引擎,它基于LXC容器技术,使用Go语言开发。
    源代码托管在Github上,并遵从Apache2.0协议。
    Docker采用C/S架构,其可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。
    简单来说:Docker就是一种快速解决生产问题的一种技术手段。我们也可以将他理解为实现虚拟技术的一种

    [docker官网](http://www.docker.com)

    [github docker源码](https://github.com/docker/docker)

    1.在Ubuntu中安装docker

    添加Docker官方GPG key

      sudo apt-key add gpg

    安装Docker稳定版

    sudo dpkg -i docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb

    检查Docker是否安装正确

    sudo docker run hello-world

    如果出现下面的结果,证明安装成功

    为了避免每次命令都输入sudo,可以设置用户权限,注意执行后须注销重新登录

    sudo usermod -a -G docker $USER


    2.docker的启动与停止
    # 启动docker
    sudo service docker start
    
    # 停止docker
    sudo service docker stop
    
    # 重启docker
    sudo service docker restart


    3.docker镜像操作

    要想获取某个镜像,我们可以使用pull命令,从仓库中拉取镜像到本地,如

    docker image pull library/hello-world

    删除镜像

    docker image rm 镜像名或镜像id
    

    docker image rm hello-world

    查看镜像历史

    docker history 镜像名:版本

    查看镜像

    docker images

    镜像 重命名
    命令格式:
    docker tag [old_image]:[old_version] [new_image]:[new_version]
    命令演示:
    docker tag nginx:latest sswang-nginx:v1.0

    4.docker容器操作

    创建容器

    docker run [option] 镜像名 [向启动容器中传入的命令]

    常用的选项如下

    交互式容器

    例如,创建一个交互式容器,并命名为myubuntu

    docker run -it --name=myubuntu ubuntu /bin/bash

    守护式容器

    创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。在容器内部exit退出时,容器也不会停止。

    docker run -dit --name=myubuntu2 ubuntu

    进入已运行的容器

    docker exec -it 容器名或容器id 进入后执行的第一个命令
    

    docker exec -it myubuntu2 /bin/bash

    查看容器

    # 列出本机正在运行的容器
    docker container ls
    
    # 列出本机所有容器,包括已经终止运行的
    docker container ls --all

    删除容器

    docker container rm 容器名或容器id

    停止与启动容器

    # 停止一个已经在运行的容器
    docker container stop 容器名或容器id
    
    # 启动一个已经停止的容器
    docker container start 容器名或容器id
    
    # kill掉一个已经在运行的容器
    docker container kill 容器名或容器id

    删除容器

    docker container rm 容器名或容器id

    5. 将容器保存为镜像

    我们可以通过如下命令将容器保存为镜像

    docker commit 容器名 镜像名

    6. 镜像备份与迁移

    我们可以通过save命令将镜像打包成文件,拷贝给别人使用

    docker save -o 保存的文件名 镜像名
    

    docker save -o ./ubuntu.tar ubuntu
    

    在拿到镜像文件后,可以通过load方法,将镜像加载到本地

    docker load -i ./ubuntu.tar

    #7.仓库管理

    ##1)仓库类型:

    &nbsp公有仓库:Docker hub、Docker cloud等

    &nbsp私有仓库:registry、harbor等

    &nbsp本地仓库:在当前主机存储镜像的地方

    ##2)仓库相关命令:

    ```

    docker login [仓库名称]
    docker pull [镜像名称]
    docker push [镜像名称]
    docker search [镜像名称]

    ```

    ##3).私有仓库的部署

    ###实施步骤:

    ###1>下载registry镜像

    ###docker pull registry
    ###2>启动仓库容器
    ###docker run -d -p 5000:5000 registry

    ###3>检查容器效果
    ###curl 127.0.0.1:5000/v2/_catalog

    ###4>配置容器权限

    ```
    sudo vim /etc/docker/daemon.json
    {"registry-mirrors": ["http://74f21445.m.daocloud.io"], "insecure-registries": ["192.168.8.14:
    5000"]}

    ```
    ###注意:私有仓库的ip地址是宿主机的ip,而且ip两侧有双引号
    ###5>重启docker服务

    ###systemctl restart docker
    ###systemctl status docker

    ###6>启动容器

    ###docker start registry 容器的 id
    ###7>标记镜像
    ###docker tag hello-author1 192.168.8.14:5000/hello-author1
    ###8>提交镜像
    ###docker push 192.168.8.14:5000/hello-author1
    ###9>下载镜像
    ###docker pull 192.168.8.14:5000/hello-author1

     #8.数据管理

    ###docker的镜像是只读的,虽然依据镜像创建的容器可以进行操作,但是我们不能将数据保存到容器中,因为容器会

    ###随时关闭和开启,容器一旦破坏,那所有的数据也会消失,解决办法就是将宿主机的磁盘与容器的磁盘进行映射,即通过数据卷和数据卷容器

    ###下面我们只对数据卷进行演示,对于数据卷的管理我们从两个方面来说

    ###1.目录

    ```

    #命令格式:
    docker run -itd --name [容器名字] -v [宿主机目录]:[容器目录] [镜像名称] [命令(可选)]
    #命令演示:
    #创建测试文件
    echo "hello" > /tmp/hello.txt
    #启动一个容器,挂载数据卷
    docker run -itd --name test1 -v /tmp:/test1 nginx
    #测试效果
    docker exec -it a53c61c77 /bin/bash
    root@a53c61c77bde:/# cat /test1/hello.txt
    hello

    ```

    ###2.文件

    ```
    #命令格式:
    docker run -itd --name [容器名字] -v [宿主机文件]:[容器文件] [镜像名称] [命令(可选)]
    #注意:容器里面的文件虽然可以改名,但类型必须和宿主机文件一致
    #命令演示:
    #创建测试文件
    echo "hello1" > /tmp/hello1.txt
    #启动一个容器,挂载数据卷
    #内部架构文档
    15
    docker run -itd --name test2 -v /tmp/hello1.txt:/nihao/nihao.sh nginx
    #测试效果
    docker exec -it 84c37743 /bin/bash
    root@84c37743d339:/# cat /nihao/nihao.sh
    hello1

    ```

    ##数据卷的删除操作

    ```

    docker volume rm
    docker volume prune

    ```

    #9.网络管理

    ##常见的docker的网络模式:

    ###bridge模式:相当于Ubuntu的NAT模式,与宿主机共用一个ip地址,并没有真实的ip,只有一个虚拟的IP地址,默认的是这种网络模式

    ###host模式:容器和宿主机共享一个ip,推荐使用这种网络模式

    ##切换网络模式的命令:

    ```

    docker run --network=host ......

    ```

    ###注:还有其他的几种网络模式,这里我们只介绍这常用的两种

    人生没有白走的路,每一步都算数 恐惧是万恶之源
  • 相关阅读:
    组合数计算--动态规划
    ListView 的position和id的区别
    android View 关于transient
    BlockingQueue深入分析
    栈的实现(JAVA)
    队列的实现(JAVA)
    《算法导论》读书笔记之第11章 散列表
    java 二叉搜索树
    桶排序
    排序算法的稳定性
  • 原文地址:https://www.cnblogs.com/niusha/p/10296626.html
Copyright © 2011-2022 走看看