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 技术的诞生。

解决的问题
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