Docker入门
Docker 思想
- 1.集装箱
- 2.标准化(运输方式、存储方式、API接口)
- 3.隔离
Docker 解决了什么问题?
- 1.运行环境不一致
- 2.独立运行、隔离进程
- 3.快速增加服务器(京东已实现所有业务Docker,Docker实例有15万个)
Docker 几个专业术语
- 1.image 称为镜像,可以理解为集装箱,image的实现是利用Linux系统底层的联合文件系统(文件分层),实现镜像存储。image可以对应bulid(构建)
- 2.仓库可以理解为集装箱码头,对应ship(运输)
- 3.容器可以理解为运行的程序,包含程序执行文件和系统运行文件,也是运行的image。对应run(执行)
Docker 在Linux安装
Docker支持以下的CentOS版本
CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本
使用 yum 安装(CentOS 7下)
Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker
通过 uname -r 命令查看你当前的内核版本
[root@runoob ~]# uname -r
安装 Docker
从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。
Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。
本文介绍 Docker CE 的安装使用。
- 1.移除旧的版本:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
- 2.安装一些必要的系统工具:
yum install -y yum-utils device-mapper-persistent-data lvm2 - 3.建议使用阿里云的地址,国外的地址,下载比较慢,而且很容易链接超时:
官网地址
sudo yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
阿里云地址
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo - 4.更新 yum 缓存和安装docker
yum makecache fast
yum install docker-ce - 5.启动 Docker 后台服务
sudo systemctl start docker - 6.测试运行 hello-world
docker run hello-world
Docker 常用命令
Docker帮助命令
docker version
docker info
docker --help
镜像命令
查看本地镜像列表
docker image ls
docker images [-a(列出本地所有的镜像-含中间映像层)/-q(只显示镜像ID)]
docker pull [不写默认中央仓库] imagename [TAG]--镜像版本默认最新版本
docker search 镜像名字 [--no-trunc(显示完整的镜像描述)/-s(列出收藏数不小于指定值的镜像)/--automated(只列出automated build类型的镜像)]
删除镜像
docker rmi [-f(强制删除)] imageName/多个imageName
删除全部镜像
docker rmi -f $(docker images - q)
容器命令
运行镜像
docker run [options] imageName [TAG][COMMANP][ARG]
[options说明]
--name="name":为容器指定一个名称
-d:后台运行模式
-i:以交互模式运行容器
-t:为容器重新分配一个伪输入终端,通常与-i同时使用
-P:随机分配端口映射
-p:指定端口映射
例: docker run -d -p 8080:8080 [-v xxxxxxxx] tomcat《后台运行tomcat容器端口映射是8080,如果有-v可以用外部文件替代内部文件》
查看已经运行的容器
docker ps
docker ps -a
运行容器
docker start containerId
停止容器
docker stop containerId
docker kill containerId
重启容器
docker restart containerId
删除容器
docker rm containerId
强制删除容器
docker rm -f containerId
容器不停止退出
ctrl+P+Q
进入正在运行的容器并以命令行交互
docker exec(再容器中打开新的终端,并且可以启动新的进程)/attach(之间进入容器启动命令终端,不会启动新的进程) -it 容器名/容器ID bash
查看容器日志
docker logs -f -t --tail containerId
查看容器进程
docker top containerId
查看容器内部细节(重要)
docker inspect containerId
从容器内拷贝文件到主机上
docker cp containerId:文件绝对路径 宿主机文件路径
替换docker 内部文件
docker cp 文件路径 containerId:文件绝对路径
运行nginx
docker run --name docker_nginx -d -p 80:80
-v /zzz/mynginx/nginx/log:/var/log/nginx
-v /zzz/mynginx/nginx/conf:/etc/nginx/conf.d
-v /zzz/mynginx/nginx/nginx.conf:/etc/nginx/nginx/conf
-v /zzz/mynginx/nginx/html:/lx/html
nginx
第一个-v:挂载日志目录
第二个-v:挂载配置目录
第三个-v:干脆把配置文件直接挂出来,不推荐
第四个-v:挂载项目目录
其他指令
docker container ls --all ---查看所有容器(包含未运行的容器)
docker commit -m "" -a "" [CONTAINER ID] [给新的镜像命名] -----打包成镜像
systemctl enable docker 设置docker开机自启动
docker update --restart 容器ID 设置docker容器自启动
部署镜像私有仓库
- 1.下载镜像registry
$ docker pull registry - 2.启动容器
$ docker run -d -p 5000:5000 --name=registry-srv [-v /mydata/dockerRegistry:/var/lib/registry] registry
- 3.作制本地镜像上传仓库
$ docker tag 源镜像 仓库IP:5000/目标镜像 - 4.上传tag镜像到仓库
docker push 制作好的image
说明:push 会出现错误 Get https://xxxxxxxx:5000/v1/_ping: http: server gave HTTP response to HTTPS client
这是因为Docker在1.3.x之后默认docker registry使用的是https,为了解决这个问题,修改本地主机的docker启动配置文件
$ vim /etc/docker/daemon.json 不存在就新建
{"insecure-registries":["192.168.84.104:5000"]}
Q.E.D.