1. Docker的基本组成
镜像(image)
镜像就是一个只读的模板,可以通过这个模板创建容器服务,一个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)
容器(container)
Docker利用容器技术,独立运行的一个或一组应用。容器是用镜像创建的运行实例。
它可以被启用,开始,停止,删除。每个容器都是相互隔离的,保证安全的平台。
可以把容器看作是一个简易版的Linux系统(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。
容器的定义和镜像几乎一摸一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的
仓库(repository)
仓库是集中存放镜像文件的场所。
仓库和仓库注册服务器(Registry)是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签
仓库分为公开仓库(public)和私有仓库(private)两种形式
最大的开放仓库是国外的 Docker Hub,存放了数量庞大的镜像供用户下载。
国内的公开仓库包括阿里云,网易云都有容器服务器(需要配置镜像加速)等
2. 在 Ubuntu 上安装
旧版本的 Docker 被称为docker,docker.io或docker-engine. 如果安装了这些,请卸载它们:
sudo apt-get remove docker docker-engine docker.io containerd runc
更新系统里的所有的能更新的软件
sudo apt-get update
安装必要工具
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
增加一个docker的官方GPG key,换成阿里云
#官网
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#换成阿里云
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
写入软件源信息,换成阿里云
#官方
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
#换成阿里云
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
更新并安装docker-ce
sudo apt-get -y install docker-ce
开启docker服务
systemctl status docker
3.镜像的基本操作
下载镜像
# search作用:
搜索Docker Hub(镜像仓库)上的镜像
# 命令格式:
docker search [OPTIONS] TERM
# 命令参数(OPTIONS):
-f, --filter filter 根据提供的格式筛选结果
--format string 利用Go语言的format格式化输出结果
--limit int 展示最大的结果数,默认25个
--no-trunc 内容全部显示
# 命令演示
docker search -f is-offical=true ubuntu
docker search ubuntu
# 拉取下载镜像
docker pull hello-world # 默认最新版本latest
docker pull hello-world:nanoserver # 指定版本
查看镜像
# 查看机器上有哪些镜像
# 命令:docker images
# 解释:
REPOSITORY TAG IMAGE ID CREATED SIZE
镜像名字 版本 id号 创建时间 大小
运行镜像
# 命令:
docker run 镜像名字
docker run hello-world
# 例:
第一个hello-world(没有任何意义)
docker run hello-world
1 客户端连到服务端,服务下载了hello-world镜像
2 通过镜像跑起容器来
3 容器输出一些东西,通过服务端发送给客户端,客户端展示在窗口里了
删除镜像
# 命令:
docker rmi 镜像名字/Id号
# 注意:
1.如果还有基于这个镜像的容器,是不允许删除镜像的
2.可以先删除容器,在删除镜像
# 查询容器依赖
docker ps -a
# 在删除要不允许的镜像
docker rm 容器/id
4.容器的基本操作
新建容器并启动
# 新建容器并启动
docker run [可选参数] image
# 参数说明
--name="Name" 容器名字,用于区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器端口(小写)
-p ip:主机端口:容器端口
-p 主机端口:容器端口(最常用)
-P 容器端口
容器端口
-P 随机执行端口(大写)
#测试,启动进入容器
docker run -it centos /bin/bash
#退出容器到主机
exit
列出所有运行的容器
# 列出所有运行的容器
docker ps [可选参数]
# 参数说明
-a 列出当前正在运行以及历史运行过的容器
-n=? 显示最近创建的容器
-q 只显示容器编号
退出容器
# 容器停止并退出
exit
# 容器不停止退出
Ctrl+p+q
删除容器
# 删除指定容器,不能删除正在运行的容器,强制删除用rm -f
docker rm 容器id
# 删除所有容器
docker rm -f $(docker ps -aq)
docker ps -a -q|xargs docker rm
启动停止容器
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止正在运行的容器
docker kill 容器id # 强制停止当前容器
进入当前正在运行的容器
# 方式一: 进入容器后开启一个新的终端,可在里面进行操作(常用)
docker exec -it 容器id /bin/bash
# 方式二: 进入容器正在执行的终端,不会启动新的进程
docker attach 容器ID
提交容器成为一个新的镜像
docker commit
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
#测试
docker commit -a "zxz" -m="commit" e7c2db1336e1 centos2:1.0
容器数据卷
数据卷技术的引入:我们希望Docker容器产生的数据可以自动同步到本地,这样容器删了数据并不会丢失;同时数据也可在容器之间共享。这就是卷技术,也就是目录的挂载,将容器内的目录挂载到linux上
docker run -it -v 主机目录:容器内目录
#测试
docker run -it -v /home/build/Jira_Integrate_Automation/5:/home/ centos2:1.0 /bin/bash
常用其他命令
查看日志
docker logs [可选参数] 容器ID
--details 显示提供给日志的其他详细信息
-f, --follow 跟踪日志输出
-n, --tail string 指定要显示的日志条数 (默认为全部)
-t, --timestamps 显示时间戳
#测试
docker logs -t -n 10 980daf06de58
查看容器中的进程
# 查看容器中的进程
docker top 容器ID
查看镜像元数据
# 查看镜像元数据
docker inspect 容器ID
从容器内拷贝文件到主机
# 从容器内拷贝文件到主机
docker cp 容器id:容器内路径 目的主机路径
#测试
docker cp 64b40f051756:/home/1.txt /home
自动化shell脚本
Unbuntu
#!/bin/sh
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install apt-transport-https -y
sudo apt-get install ca-certificates -y
sudo apt-get install curl -y
sudo apt-get install gnupg-agent -y
sudo apt-get install software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get -y install docker-ce
systemctl status docker
Centos
#!/bin/sh
sudo yum remove docker docker-engine docker.io containerd runc
sudo yum update
#sudo yum install -y yum-utils
#sudo yum install -y device-mapper-persistent-data
#sudo yum install -y lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce
sudo systemctl start docker
systemctl enable docker