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

  • 相关阅读:
    面向对象的继承关系体现在数据结构上时,如何表示
    codeforces 584C Marina and Vasya
    codeforces 602A Two Bases
    LA 4329 PingPong
    codeforces 584B Kolya and Tanya
    codeforces 584A Olesya and Rodion
    codeforces 583B Robot's Task
    codeforces 583A Asphalting Roads
    codeforces 581C Developing Skills
    codeforces 581A Vasya the Hipster
  • 原文地址:https://www.cnblogs.com/longchengruoxi/p/11278161.html
Copyright © 2011-2022 走看看