Docker介绍:
Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。虚拟化在计算领域指的是计算机的各种资源的虚拟化,如服务器,网络,存储等,予以抽象 转换后呈现出来,使得用户可以以比原本的组态更好的方式应用这些资源。
Docker优点
启动速度快,秒级
性能接近原声
内存代价小
硬盘资源节省
运行密度大,单机支持上千个容器
可以安全隔离不同的应用程序
容易迁移
以上优点都是相对于虚拟机来说的。总的来说,Docker容器快,对系统资源需求少,设计理念方便用户,通过Dockerfile支持灵活的自动化创建和部署机制提高工作效率。
概念
Dicker镜像
Docker镜像类似于虚拟机镜像,一个镜像可以只包含一个基本的操作系统,里面仅安装了Apache,就可以成为Apache镜像
Docker容器
Docker容器类似于一个沙箱,Docker利用容器来隔离和运行应用,容器是从镜像创建的应用运行实例。可以把容器看作一个简易版的Linux系统环境以及运行在上面的应用程序打包成的盒子。可以理解为容器是镜像所构成的实例。
Docker仓库
Docker仓库类似于代码仓库,集中存放Docker镜像的地方。
安装:
命令安装:
sudo apt-get update
sudo apt-get install docker
sudo apt-get install docker.io
sudo apt-get install docker-registry
具体步骤:
Docker安装步骤
以下以ubuntu18.04 安装为例:
1.首先更新资源update
sudo apt-get update
2.安装docker
sudo apt-get install docker
sudo apt-get install docker.io
sudo apt-get install docker-registry
3.停止、启动、重启docker
sudo systemctl start | stop | restart docker.service
4. 查看docker版本
sudo docker version
5.加入开机自启
sudo systemctl enable docker
6.运行hello-world镜像来测试是否安装成功
docker run hello-world
#本地没有镜像时会自动从docker hub中下载
NVIDIA-docker:
具体安装可以参考官网这里
# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker
# Add the package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
执行如下指令安装18.03.1版本的docker。
sudo apt-get install docker-ce=18.03.1~ce-0~ubuntu
注意:此处的版本号需要根据nvidia-docker的需要进行对应修改
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd
sudo docker run -–runtime=nvidia -–rm nvidia/cuda nvidia-smi
# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd
# Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
or
# list 查询可用版本:
apt-cache madison nvidia-docker2 nvidia-container-runtime
# 在列表中我选择18.09.2的版本进行安装
# nvidia-docker2和nvidia-container-runtime的版本最好相同
sudo apt-get install -y nvidia-docker2=2.0.3+docker18.09.2-1 nvidia-container-runtime=2.0.0+docker18.09.2-1
# docker 命令安装
sudo apt-get update
sudo apt-get install docker
sudo apt-get install docker.io
sudo apt-get install docker-registry
# test
docker run hello-world
docker创建常见容器
1.创建nginx 容器:
sudo docker run -d -p 80:80 hub.c.163.com/library/nginx #镜像地址可以登录163镜像源进行查找
2.创建mysql 容器:
sudo docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=jpress hub.c.163.com/library/mysql:latest
3.创建tomcat容器:
sudo docker pull hub.c.163.com/library/tomcat:latest
4.通过ubutnu18.04镜像创建一个容器:
sudo docker create ubuntu:18.04 #从默认镜像地址进行查找
4.开始运行容器,并进入镜像的bash终端
sudo docker run -i -t ubuntu:18.04 /bin/bash
操作
镜像操作
查看docker镜像:docker images
查找docker镜像:docker search 镜像名
获取docker镜像:docker pull 镜像名:版本 可运行不同版本镜像
提交容器副本:docker commit -m 描述信息 -a 镜像作者 容器id 要创建的目标镜像名
使用文件构建docker镜像: docker build -t 目标镜像名 -f 文件所在目录 镜像存放目录
镜像删除:docker rmi -f 强制删除镜像
获取镜像
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker pull ubuntu:18.04
运行镜像
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run -it --rm --name ubuntu18 -p 8080:8080 ubuntu:18.04 bash
-i:以交互模式运行容器,通常与 -t 同时使用
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用
-d:容器后台运行,守护态
-p:指定容器暴露的端口(宿主机端口:容器端口)
--name:指定容器名称
--rm:指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash
列出镜像
docker image ls
docker image ls -a :列出全部镜像
docker image ls ubuntu :列出部分镜像
删除本地镜像
docker image rm [选项] <镜像1> [<镜像2> ...]
docker image rm ubuntu:18.04
<镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要
容器操作
Docker启动:systemctl start docker
Docker关闭:systemctl stop docker
查看正在运行的容器:docker ps -a 列出所有容器
根据镜像创建容器:docker create images_id --name 容器名
运行容器:docker run -d -p 容器端口:主机端口 镜像或者容器名 -d 容器在后台运行 -p 将容器网络端口映射到主机 -v 主机目录:容器目录(将主机的目录挂载到容器的目录) -w 指定容器工作目录
查看端口映射情况:docker port 容器名
查看容器日志: docker logs -f 容器id -f 类似与tail -f 可以标准输出
查看容器进程:docker top 容器名
删除容器:docker rm 容器名
进入容器:docker attach 容器id
新建并启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run -it --rm --name ubuntu18 -p 8080:8080 ubuntu:18.04 bash
-i:以交互模式运行容器,通常与 -t 同时使用
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用
-d:容器后台运行,守护态
-p:指定容器暴露的端口(宿主机端口:容器端口)
--name:指定容器名称
--rm:指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash
启动已终止容器
docker container start [container ID or NAMES]
docker container start ubuntu18
列出容器
docker ps
docker container ls
-a :显示所有的容器,包括未运行的
-n :列出最近创建的n个容器
终止容器
docker container stop [container ID or NAMES]
重启容器
docker container restart [container ID or NAMES]