docker入门

2019/07/27 Container 共 3153 字,约 10 分钟

docker入门

Docker 是一种商业容器化平台和运行时环境,它可帮助开发人员构建、部署和运行容器。它采用客户端-服务器架构,通过单个 API 提供简单的命令和自动化功能。

Docker 还提供一个工具包,它常用于将应用打包为不可变的容器镜像,即通过编写 Dockerfile,然后运行相应的命令来使用 Docker 服务器构建镜像。开发人员可以不使用 Docker 创建容器,但使用 Docker 平台可以让创建过程更加便捷。然后,可以将这些容器镜像部署到任何支持容器的平台上运行,例如 Kubernetes、Docker Swarm、Mesos 或 HashiCorp Nomad。

运行容器前需要编写Docker File,通过 dockerFile 生成镜像,然后才能运行 Docker 容器。

Docker File 定义了运行镜像(image)所需的所有内容,包括操作系统和软件安装位置。一般情况下都不需要从头开始编写 Docker File,在 Docker Hub 中有来自世界各地的工程师编写好的镜像,你可以基于此修改。

虚拟化技术已经走过了三个时代,没有容器化技术的演进就不会有 Docker 技术的诞生。

img

解决的问题

Docker 主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主操作系统和其它隔离的进程。使用 Docker 可以不修改应用程序代码,不需要开发人员学习特定环境下的技术,就能够将现有的应用程序部署在其它机器上。

和虚拟机比较

虚拟机也是一种虚拟化技术,它与 Docker 最大的区别在于它是通过模拟硬件,并在硬件上安装操作系统来实现。

启动虚拟机需要先启动虚拟机的操作系统,再启动应用,这个过程非常慢;而启动 Docker 相当于启动宿主操作系统上的一个进程。

虚拟机是一个完整的操作系统,需要占用大量的磁盘、内存和 CPU 资源,一台机器只能开启几十个的虚拟机。

而 Docker 只是一个进程,只需要将应用以及相关的组件打包,在运行时占用很少的资源,一台机器可以开启成千上万个 Docker。

除了启动速度快以及占用资源少之外,Docker 具有以下优势: 更容易迁移、维护、扩展

简单三部曲

官方参考

可运行以下脚本

echo "检查Docker......"
docker -v
if [ $? -ne  0 ]; then
    echo "安装docker环境..."
    if [[ `uname` == 'Darwin' ]]; then
        which -s brew
        if [[ $? != 0 ]]; then
            echo '缺brew, Installing Homebrew...'
            /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
        fi
        echo "安装docker, 同时自带docker-compose..."
        brew cask install docker
    else
        echo "it's linux"
        ehco "安装docker..."
        curl -fsSL https://get.docker.com -o get-docker.sh
        sh get-docker.sh

        echo "安装docker-compose..."
        sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
        sudo chmod +x /usr/local/bin/docker-compose
        docker-compose --version
    fi
else
    echo "docker已安装"
fi

也可以直接下载桌面版:

Follow the instructions appropriate for your operating system to download and install Docker Desktop:

docker --version
docker run hello-world
docker ps --all

part2:
git clone https://github.com/dockersamples/node-bulletin-board
cd node-bulletin-board/bulletin-board-app
docker build --tag bulletinboard:1.0 .
docker run --publish 8000:8080 --detach --name bb bulletinboard:1.0
docker rm --force bb
docker stop bb

part3:
docker tag bulletinboard:1.0 <Your Docker ID>/bulletinboard:1.0
docker push <Your Docker ID>/bulletinboard:1.0
Docker hub: https://hub.docker.com/repository/docker/mafulong/bulletinboard

菜鸟教程:

docker run ubuntu:15.10 /bin/echo "Hello world"
/bin/echo "Hello world": 在启动的容器里执行的命令

docker run -i -t ubuntu:15.10 /bin/bash
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

docker logs 2b1b7a428627
docker logs amazing_cori
docker stop eloquent_matsumoto

容器

docker pull ubuntu
docker run -it ubuntu /bin/bash
docker ps -a
docker start b750bbbcfd88 启动已停止的
docker stop <容器 ID>
docker restart <容器 ID>
docker exec -it 243c32535da7 /bin/bash

导出导入
docker export 1e560fca3906 > ubuntu.tar
 cat docker/ubuntu.tar | docker import - test/ubuntu:v1
docker import http://example.com/exampleimage.tgz example/imagerepo
 docker rm -f 1e560fca3906

docker run -d -P training/webapp python app.py
-P:将容器内部使用的网络端口映射到我们使用的主机上。

docker port bf08b7f2cd89
docker logs [ID或者名字] 
docker logs -f bf08b7f2cd89

docker top wizardly_chandrasekhar 查看进程
docker inspect wizardly_chandrasekhar

镜像

docker images 来列出本地主机上的镜像。
docker pull ubuntu:13.10
docker search httpd
docker rmi hello-world 镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像
docker tag 860c279d2fec runoob/centos:dev

Search

    Table of Contents