zoukankan      html  css  js  c++  java
  • docker学习笔记-1.docker基础

    docker基本

    docker 官方网址  https://www.docker.com

    docker 目前支持多种操作系统的安装,在linux系统中要求内核的版本在3.10或以上版本。

    2017年 docker推出新的项目Moby,github地址为:https://github.com/moby/moby ,Moby属于Docker项目的全新上游项目,Docker将是一个隶属于Moby的子产品,之后的版本将分为CE(社区版)和EE(企业版)

    docker从2017.3.1开始每个季度发布一个稳定版本,其版本规则变更为YY.MM

    CE版本 维护四个月,EE版本维护一年

    本次docker的实验都是基于centos7.5。

    本次学习的docker版本为1803

    阿里云的rpm下载地址

    https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/

    官方rpm包的下载地址

    https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

    docker安装和操作

     下载安装docker

     启动并验证docker服务

    查看docker的版本

    docker version

    验证docker网卡

    在docker启动后,默认生成一个名为docker0的网卡,并默认IP地址为172.17.0.1

    查看docker信息

    docker info

    docker存储引擎

    目前docker的默认存储引擎为overlay2,需要磁盘分区支持d-type文件分层功能,因此需要系统磁盘额外的支持。

    如果docker的数据目录为一块单独的磁盘分区,并且是xfs格式,那么需要在格式化磁盘时候,加上参数 -n ftype=1,否则后期启动容器的时候会报不支持d-type.

    docker镜像加速配置

    国内下载国外镜像有时候会很慢,因此有时候可以更改docker配置文件添加一个加速器,可以通过加速器达到加速下载目的。

    https://cr.console.aliyun.com/

    创建目录 

    [root@localhost docker]# mkdir /etc/docker/

    创建文件并修改

    [root@localhost docker]# vi daemon.json

    [root@localhost docker]# cat daemon.json
    {"registry-mirrors":["https://7mbt1t62.mirror.aliyuncs.com"]}
    [root@localhost docker]#

    重启docker服务

    [root@localhost docker]# systemctl daemon-reload
    [root@localhost docker]# systemctl restart docker

    docker镜像基础命令

    不指定版本&指定版本

     [root@localhost docker]# docker search centos

    [root@localhost docker]# docker search centos:7.5

    从docker仓库将镜像下载到本地

    [root@localhost docker]# docker pull centos

    查看本地镜像

    下载完成的镜像比下载的大,因为下载完成后会解压。

    #Repository 镜像所属的名称

    #TAG 镜像版本号 默认为latest

    #IMAGE ID 镜像唯一ID表示

    #CREATED 镜像创建时间

    #SIZE 镜像的大小

    镜像导出

    可以将镜像导出到本地为一个压缩文件,然后复制到其他服务器进行导入使用。

    镜像导出方法1

     [root@localhost data]# docker save centos >/root/data/centos-1.tar.gz

    镜像导出方法2

    [root@localhost data]# docker save -o /root/data/centos-2.tar.gz centos

     查看镜像的内容

    包含了镜像的相关配置,配置文件分层,分层是为了方便文件使用,即相同的文件可以共用。

    镜像导入

    两种方法进行导入

    docker load </root/data/centos-1.tar.gz

    docker load -i /root.data/centos-2.tar.gz

    删除镜像

    当有容器使用该镜像启动运行时,该镜像不能删除。

    docker rmi centos

    获取运行参数帮助

    docker daemon -help

    删除容器

    删除没有在运行的镜像

    docker rm  容器ID|容器名称

    强制删除正在运行的镜像

    docker rm -rf 容器ID|容器名称

    docker的基础操作命令  

    单次运行,没有自定义容器名称。启动的容器在执行完shell命令后就退出

    [root@localhost data]# docker run centos echo 'hello world.'

    查看正在运行的容器

    [root@localhost data]# docker ps 

    查看所有的容器,包括退出的容器。

    [root@localhost data]# docker ps -a

    从镜像启动一个容器,并随机生成容器ID和名称

    退出容器  ctrl+p+q

     

    随机映射端口

    [root@localhost ~]# docker pull nginx

    在前台启动容器,退出后容器也会退出,-P  随机映射端口

    [root@localhost ~]# docker run -P nginx

    从另一个终端查看容器宿主机的端口的映射,默认是从32768开始的

    指定端口映射&指定启动容器的名字 --name   -p  指定端口映射

    [root@localhost data]# docker run -p 8888:80 --name nginx-1  nginx

    可以一次性映射多个端口

    [root@localhost ~]# docker run -p 8888:80 -p 8889:443 --name nginx-2 nginx

    可以指定协议,默认协议为tcp   -d  表示 在容器宿主机的后台执行

    [root@localhost ~]# docker run -d -p 8883:80/udp --name nginx-4 nginx

    查看容器的访问日志

    [root@localhost ~]# docker logs  nginx-1 # 一次查看

    [root@localhost ~]# docker logs  -f nginx-13  #持续查看

    查看容器已经映射的端口

    [root@localhost ~]# docker port nginx-1

     自定义容器名称 并在前台执行

    [root@localhost ~]# docker run  -it  --name nginx-test nginx

    自定义容器名称 并在后台执行

    [root@localhost ~]# docker run  -d -p 8888:80  --name nginx-test nginx

    创建容器,并进入容器

    [root@localhost ~]# docker run  -it  --name centos-test centos /bin/bash

    创建容器,在前台执行,退出容器后,容器自动删除

    [root@localhost ~]# docker run  -it  -rm --name nginx-test nginx

    容器的传递命令,容器需要一个前台运行的进程才能保持容器的运行,通过传递运行参数是一种方式,另外一种方式在构建镜像的时候指定容器启动时的运行的前台命令。

    [root@localhost ~]# docker run  -d   --name centos-test centos  /usr/bin/tail -f '/etc/hosts'  

     容器的启动和关闭

    [root@localhost ~]# docker start cb3745225159

    [root@localhost ~]# docker stop cb3745225159

    进入正在使用的容器

    方法1

    此方法进入容器后会同步给所以进入容器的用户;exit退出容器后,容器关闭。不推荐使用

    [root@localhost ~]# docker attach cf41e382bba6    # 后面跟容器id或者容器名称

    方法2 

    使用nsenter命令

    推荐使用此方法,nsenter命令需要通过PID进入容器内部,可以使用docker inspect 获取容器的PID

    [root@localhost ~]# yum install util-linux  #安装nesenter命令

    [root@localhost ~]# docker inspect -f "{{.State.Pid}}" cf41e382bba6    #后面跟容器的ID

    获取到某个docker容器的PID,可以通过PID通道进入到容器中

    安装nsenter 命令

    util-linux包中含有nsenter命令,下载 util-linux的源码包 https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24-rc2.tar.gz

    ./configure --without-ncurses --prefix=/opt/util/

    make && make install

    执行命令 进入容器

    [root@192 tool]# docker ps -a

    [root@192 tool]# docker inspect -f "{{.State.Pid}}" cf41e382bba6

    [root@192 ~]# nsenter  -t 3916 -m -u -i -n -p

    使用docker-in.sh进入容器

    1 #!/bin/bash                                                  
    2 docker_in(){                                                 
    3   NAME_ID=$1                                                 
    4   PID=$(docker inspect -f "{{.State.Pid}}" ${NAME_ID})       
    5   nsenter -t ${PID} -m -u -i -n -p                           
    6 }                                                            
    7 docker_in $1                                                 

     查看容器的 hosts文件

    [root@192 ~]# docker run -it --name sakula centos /bin/bash

    [root@254bdef59ba0 /]# cat /etc/hosts

    172.17.0.4      254bdef59ba0  #  默认会将实例ID添加到hosts文件中

    批量关闭正在运行的容器

    [root@192 ~]# docker stop `docker ps -q`

    批量强制关闭正在运行的容器

    [root@192 ~]# docker kill $(docker ps -a -q)

    批量删除已将退出的容器

    [root@192 ~]# docker rm -f `docker ps -a -q -f status=exited`

    批量删除所有的容器

    [root@192 ~]# docker rm -f $(docker ps -a -q)

    指定容器的dns

    dns服务,默认采用宿主机的dns地址

    1 将dns地址配置在宿主机

    2 将参数配置在docker 启动脚本中 --dns=1.1.1.1

    [root@192 ~]# docker run -ti --rm  --dns=1.1.1.1 centos /bin/bash

     

  • 相关阅读:
    关于字符编码
    cocosbuilder中使用字体描边时,字符重叠,间距过小问题
    2dx关于js响应layer触摸消息的bug
    关于js-binding中Layer触摸事件的优化
    2dx解析cocosbuilder中使用layer时的缺陷
    关于 2dx v3.7 UIScale9Sprite的bug
    c++11 Chrono时间库
    cocos2d-x lua table数据存储
    cocos2d-x lua 使用ListView
    Oracle数据库impdp时ora-00439:未启用功能:Deferred Segment Creation
  • 原文地址:https://www.cnblogs.com/hexintong/p/9283627.html
Copyright © 2011-2022 走看看