新手-Docker基础快速入门

  1. 什么是docker
    Docker是一个基于LXC技术构建的容器引擎,基于GO语言开发,遵循Apache2.0协议开源
    与虚拟机的区别
    (1)docker有着比虚拟机更少的抽象层。由于docker不需要hypervisor
    实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。
    因此在cpu1,内存利用率上docker将会在效率上有明显优势。
    (2)docker利用的是宿主机的内核,而不需要Guest OS,因此,当新建一个容器时,docker
    不需要和虚拟机一样重新加载一个操作系统内核。避免了加载操作系统内核这个比较费时费资源的过程
    ,当新建一个虚拟机时,虚拟机需要加载Guest OS,这个过程是分钟级别的。而docker由于
    直接利用宿主机的操作系统,因此新建一个docker容器只需要几秒钟。
docker容器 虚拟机vm
操作系统 与宿主机共享os 宿主机os上运行虚拟机os
存储大小 镜像小,便于存储与传输 镜像大(vmdk,vmi等)
运行性能 几乎无额外的性能损失 操作系统额外的cpu,内存消耗
移植性 轻便,灵活,适应于linux 笨重,与虚拟化技术耦合度高
硬件亲和性 面向软件开发者 面向硬件运维者
部署速度 快速,秒级 较慢,10s以上
  1. 基本概念
    Container:
    Docker Container(容器)即Docker将宿主机隔开的一个个独立空间
    Image:
    Docker Image(镜像)可以看作是一个特殊的文件系统,即对某一时刻容器状态的备份
    Docker Registry:
    Docker镜像仓库中心
    https://hub.docker.com/
    https://dev.aliyun.com/search.html
    https://c.163yun.com/hub#/m/home/

在ubuntu系统中配置阿里云镜像加速
新手-Docker基础快速入门_第1张图片新手-Docker基础快速入门_第2张图片这一步很重要,否则后面的下载非常慢。

  1. Docker安装
    安装本地版本:apt-get install -y docker.io
    启动服务:(sudo )service docker start
    查看版本:docker --version | docker -v
    查看镜像:docker images

  2. Docker镜像操作
    查看镜像
    docker images
    搜索镜像
    docker search 镜像关键词
    镜像拉取
    docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    镜像删除
    docker rmi 镜像Id或镜像名称

  3. Docker容器操作
    生成容器
    docker run -d -p 8888:8080 --name tomcat-test tomcat
    查看容器
    查询正在运行的容器:docker ps|grep 容器关键词
    查询全部(包括已停止)的容器:docker ps -a|grep 容器关键词
    进入容器
    docker exec -it containerId/containerName /bin/bash
    退出容器
    exit
    停止容器
    docker stop containerId/containerName
    启动容器
    docker start containerId/containerName
    删除容器
    docker rm containerId/containerName
    拷贝文件
    docker cp 宿主机目录及文件 容器名称:容器目录
    查看容器ip
    docker inspect --format ‘{{.Name}} - {{ range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ $(docker ps -aq)
    或者
    docker inspect
    其他:
    停止docker:
    docker stop $(docker ps -a | grep “Exited” | awk ‘{print $1 }’)
    删除docker:
    docker rm $(docker ps -a | grep “Exited” | awk ‘{print $1 }’)
    删除images:
    docker rmi $(docker images | grep “none” | awk ‘{print $3}’)
    删除在运行的容器:
    docker rm -f $(docker ps -q)
    列出镜像的变更历史:
    docker history 镜像名

  4. Docker网络配置与端口映射
    网络配置
    host 模式
    container 模式
    none 模式
    bridge 模式,默认
    –net=(具体模式名称)
    端口映射
    -p
    固定IP
    创建网络,指定网段
    docker network create --subnet=172.18.0.0/16 mynetwork
    创建容器,指定IP
    docker run -it -d --net mynetwork --ip 172.18.0.8 --name mytomcat tomcat

  5. Dokerfile
    内置命令
    FROM :依赖的底层镜像
    MAINTAINER :指定镜像创建者
    ENV : 设置环境变量
    RUN :运行shell命令
    COPY : 将编译机本地文件拷贝到镜像文件系统中
    EXPOSE : 指定监听端口
    ENTRYPOINT :与执行命令,创建容器并启动后才执行

#
# JDK-8U151
#
FROM yi/centos7-ssh
MAINTAINER Yi.Ma 
RUN yum clean all
RUN yum -y update
# Install libs
RUN yum install deltarpm rpm make wget tar unzip \
         gcc gcc-c++ -y

RUN mkdir -p /home/work/apps/
RUN mkdir -p /usr/local/java/
WORKDIR /home/work/apps/
RUN wget --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie;" http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.tar.gz
RUN tar -zxvf jdk-8u161-linux-x64.tar.gz
RUN rm jdk-8u161-linux-x64.tar.gz
RUN mv -f jdk1.8.0_161/ /usr/local/java/jdk1.8.0_161
ENV JAVA_HOME=/usr/local/java/jdk1.8.0_161
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# open ports
EXPOSE 22

编写Dockerfile文件的名称必须为Dockerfile
执行命令生成镜像
docker build [OPTIONS] PATH | URL | -

  1. 安装shipyard
#下载镜像
docker pull rethinkdb
docker pull microbox/etcd
docker pull shipyard/docker-proxy
docker pull swarm
docker pull shipyard/shipyard
#将下载的镜像启动成容器
docker run -ti -d --restart=always --name shipyard-rethinkdb rethinkdb

docker run -ti -d -p 4001:4001 -p 7001:7001 --restart=always --name shipyard-discovery microbox/etcd:latest -name discovery

docker run -ti -d -p 2375:2375 --hostname=$HOSTNAME --restart=always --name shipyard-proxy -v /var/run/docker.sock:/var/run/docker.sock -e PORT=2375 shipyard/docker-proxy:latest

# 需要替换为docker的IP
docker run -ti -d --restart=always --name shipyard-swarm-manager swarm:latest manage --host tcp://0.0.0.0:3375 etcd://:4001

docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr :2375 etcd://:4001

docker run -ti -d --restart=always --name shipyard-controller --link shipyard-rethinkdb:rethinkdb --link shipyard-swarm-manager:swarm -p 9090:8080 shipyard/shipyard:latest server -d tcp://swarm:3375
#注意8080端口有可能与tomcat重复(已经改成了9090)
#需要开放4001端口 sudo ufw allow 4001

你可能感兴趣的:(docker)