zoukankan      html  css  js  c++  java
  • docker初步学习以及常用命令

    分割线以下记录的是文档

    按照文档内容进行操作,首先在linux上安装docker:

    yum -y install docker

    然后按照步骤,搜索busybox镜像(从docker hub上远程搜索,需要联网):

    docker search busybox

    下载镜像

    docker pull busybox

    根据镜像创建容器

    docker run -t -i busybox /bin/bash

    在这里一直报错

     docker ps -a

    发现容器已经被创建了,但是启动不起来,然后

    docker start container_id

    同样的报错

    命令是按照百度来的,后面找大神求教,敲了如下命令:

    docker run -tid busybox

    成功启动busybox镜像

    结论:

    每一个docker hub上的镜像都有对应的run命令,如果想正确使用某一个镜像,需要在docker hub官网上去查找镜像对应的run命令,才能正确的启动镜像对应的容器。

    示例:

    这是bitnami/mariadb镜像在docker hub上的启动命令

     错误示范

     

    正确命令:

     docker run -tid -e ALLOW_EMPTY_PASSWORD=yes bitnami/mariadb:latest

    上图有两个正在运行的docker容器,就是通过正确命令运行成功的,不再演示截图了。

     备注:docker run 命令需要带参数

    详见对应的链接:点击我


    docker 01

    容器技术的核心有以下几个内核技术组成:

    CGroups(Control Groups)-资源管理NameSpace-进程隔离

    SELinux安全

    优势
    传统虚拟机需要给每个VM安装操作系统容器使用的共享公共库和程序
    启动非常快速
    劣势
    容器的隔离性没有虚拟化强

    共用Linux内核,安全性有先天缺陷SELinux难以驾驭

    监控容器和容器排错是挑战
    docker 安装
    把软件 docker-engine docker-engine-selinux 拷贝到私有yum仓库,运行 createrepo  .

    安装 docker
    yum clean all
    yum install -y docker-engine docker-engine-selinux

    设置开机启动,启动 docker 服务
    systemctl  enable  docker
    systemctl  start   docker

    系统刚刚配置完是没有镜像的
    查看系统镜像
    docker images

    从官方源搜索镜像
    docker search busybox

    下载镜像
    docker pull busybox

    上传镜像
    docker push busybox

    把本机镜像备份为 tar 包
    docker save busybox >busybox.tar

    把备份的tar包导入到本机镜像
    docker load <busybox.tar

    练习导入镜像

    1、查看容器
    docker ps

    2、创建一个 bash 交互的容器
    docker run -it centos /bin/bash

    3、创建一个非交互的容器
    docker run nginx
    docker run -itd centos /bin/bash

    查看镜像列表
    docker images

    查看镜像制作历史docker history busybox

    查看镜像底层信息

    docker inspect busybox

    下载镜像docker pull busybox

    上传镜像docker push

    删除本地镜像docker rmi busybox

    镜像另存为tar包
    docker save busybox > busybox.tar

    使用tar包导入镜像
    docker load <busybox.tar

    搜索镜像

    docker search busybox

    修改镜像名称和标签

    docker tag busybox:latest busybox:v1

    容器相关命令

    以交互模式启动一个容器
    docker run -it centos bash

    启动的容器放在后台
    docker run -itd centos bash

    显示正在运行的容器
    docker ps

    显示所有容器
    docker ps -a

    显示所有容器,单只显示 id
    docker ps -aq

    启动,停止,重启容器
    docker start|stop|restart  容器id

    进入容器
    docker exec -it  容器id  /bin/bash

    连接容器 console,exit 退出会导致容器关闭,可以使用 CTRL +(p,q) 退出
    docker attach 容器id

    显示容器详细信息
    docker inspect 容器id

    查看容器内运行的进程
    docker top 容器id

    删除容器
    docker rm 容器id

    关闭所有容器
    docker stop $(docker ps -aq)
    docker rm $(docker ps -aq)



    docker02

    增删改数据、安装软件、修改配置文件后,容器另存为镜像
    docker run -it centos
    修改容器配置环境
    配置 yum 源
    [rhel7]
    name=rhel
    baseurl=ftp://192.168.4.254/rhel7
    enabled=1
    gpgcheck=0

    清理缓存
    yum clean all
    安装软件
    yum install -y net-tools
    yum install -y psmisc
    yum install -y iproute
    yum install -y vim-enhancedyum
    yum install -y openssh-clients  客户端
    yum install -y openssh-server   服务端

    安装完成以后,切换到宿主机
    对已经修改过的 docker 做镜像
    查看修改过的容器的 id
    docker ps

    把容器做成镜像
    docker commit  容器id  新镜像的名称:tag
    docker commit  dd61895d9f88 mycentos:latest

    查看新的镜像
    docker images

    用新的镜像生成容器
    docker run -it mycentos /bin/bash

    进入容器检查,刚刚的配置

    利用 Dockerfile 编排镜像
    关键字
    FROM:基础镜像
    MAINTAINER:镜像创建者信息
    EXPOSE:开放的端口
    ENV:设置变量
    ADD:复制文件到镜像
    RUN:制作镜像时执行的命令,可以有多个

    WORKDIR:定义容器默认工作目录
    CMD:容器启动时执行的命令,仅可以有一条CMD

    综合 Dockerfile 实验
    1、自动配置 yum 的源
    2、安装 net-tools psmisc httpd sshd
    3、设置容器启动,自动运行 [sshd,httpd]
    4、设置默认主页为 Hello World
    5、添加用户 user01,并设置默认密码为 123456
    6、在宿主机添加映射,把 22,80 映射出去

    yum 源配置文件
    local.repo
    [rhel7]
    name=rhel
    baseurl=ftp://192.168.4.254/rhel7
    enabled=1
    gpgcheck=0

    Dockerfile 文件配置
    FROM centos
    MAINTAINER  lix  lix@tedu.cn
    ENV  HOSTNAME=web
    RUN  rm -f /etc/yum.repos.d/*
    ADD  local.repo /etc/yum.repos.d/local.repo
    RUN  yum clean all
    RUN  yum install -y net-tools psmisc vim-enhanced openssh-clients
    RUN  yum install -y openssh-server httpd
    WORKDIR  /var/www/html
    RUN  echo "Hello World" >index.html
    RUN  useradd user01
    RUN  echo 123456 |passwd --stdin user01
    RUN  chage -d 0 user01
    EXPOSE  22
    EXPOSE  80
    ADD  run.sh /etc/init.d/run.sh
    CMD  ["/etc/init.d/run.sh"]

    因为每个 images 只能有一个 CMD,我们需要启动两个服务
    这里使用一个脚本解决这个问题
    run.sh 脚本
    #!/bin/bash
    /usr/sbin/sshd-keygen >/dev/null 2<&1
    /usr/sbin/sshd
    /usr/sbin/httpd -DFOREGROUND

    配置完以后,build 自定义镜像
    docker build -t myimg .

    编译成功以后,我们启动容器,这里使用参数 -p 映射端口
    [ -p ] 宿主机端口:容器端口
    docker run -d -p 80:80 -p 222:22 myimg

    容器启动以后:
        可以使用 curl http://宿主机ip/ 访问容器
        可以使用 ssh -l user01 -p 222 宿主机 ip 连接

    创建私有仓库
    1、docker 的启动文件,添加参数
    --insecure-registry=192.168.4.20:5000

    systemctl daemon-reload
    systemctl restart docker

    2、启动私有仓库
    docker run -d -p 5000:5000 registry

    验证
    curl http://192.168.4.20:5000/v2/

    3、给镜像打标签
    docker tag busybox:latest 192.168.4.20:5000/busybox:latest

    4、上传
    docker push 192.168.4.20:5000/busybox:latest

    验证:
    删除本地镜像
    docker rmi 192.168.4.20:5000/busybox:latest busybox:latest

    使用远程镜像启动容器
    docker run -it 192.168.4.20:5000/busybox

    查看远程仓库上有什么镜像
    http://192.168.4.20:5000/v2/_catalog

    查看远程镜像的tag
    http://192.168.4.20:5000/v2/<name>/tags/list

    查看容器的ip
    docker inspect -f {{.NetworkSettings.IPAddress}} 容器id

    使用容器挂载共享目录
    -d 宿主机源目录:容器内目录
    docker run -d -v /var/webroot:/var/www/html myimg

    NFS 共享目录
    在 docker 的宿主机挂载 NFS 共享目录
    在启动容器的时候,使用 -v 参数把 NFS 共享目录挂接进容器

    docker 网络管理
    查看 docker 网络结构
    docker network ls

    创建一个网桥
    docker network create --driver bridge --subnet=192.168.1.0/24 br1

    查看某一个桥的详细信息
    docker network inspect 网桥id

    创建一个容器,使用新建的网桥
    docker run -it --network=br1 myimg /bin/bash


    给容器添加网卡
    nspid=$(docker inspect -f '{{.State.Pid}}' conid)

    ip link add lnet0 type veth peer name rnet0

    ip link set dev lnet0 master br0

    ip link set dev lnet0 up

    ip link set dev rnet0 name eth1 netns ${nspid}

    ln -s /proc/${nspid}/ns/net /var/run/netns/${nspid}

    ip netns exec ${nspid} ip link set dev eth1 up

    ip netns exec ${nspid} ip addr add 192.168.1.100/24 brd 192.168.1.255 dev eth1

  • 相关阅读:
    EntityFramework 插入自增ID主从表数据
    API接收数据反序列化失败问题查找
    Linq Group by获取数量和数据
    git 常用命令
    Redis安装及局域网访问配置CentOS
    Azure虚拟机网站部署 防火墙设置
    .NET基础拾遗(1)类型语法基础和内存管理基础【转】
    ASP.NET CSRF 解决【网摘】
    win7 oracle 冷恢复
    $.ajax中contentType: “application/json” 的用法[转]
  • 原文地址:https://www.cnblogs.com/longchengruoxi/p/11278161.html
Copyright © 2011-2022 走看看