基础篇
前言:
学习一样东西总是用来解决实际问题的。以前自己在家开发分布式应用的时候,由于总是要依赖很多中间件、数据库(eg:redis、mysql、mq、sleuth)等环境。刚开始我会在在自己电脑安装这些环境,每次重启电脑都要去重启这些环境,特别麻烦。后来我把所有环境都放到虚拟机里面,这样每次重启电脑只需要打开挂起的虚拟机就能一次性部署好所有的环境依赖。后面又迎来了新的问题,我只能在这一台我部署好虚拟机环境的电脑开发,如果遇到使用其他电脑就没办法开发了。于是我需要采用一种新的方式去解决这个问题。-----依赖docker与docker hub可以随时去拉取我特定的开发环境。
(一)docker基础入门
1.docker概述
docker(go语言开发)是基于硬件层面的容器化技术,解决了虚拟机消耗硬件资源大的痛点,是一种轻量化的虚拟机(内核级别的虚拟化)。一个容器可以由我们自定义环境,并且容器是可复制可迁移的可发布云端的,这样的特性广泛使用在服务端的**“弹性、负载、容灾”**。并且由于容器化的成熟,推动devops的快速发展,解决传统开发人员与运维人员之间的磨擦点。
文档地址
仓库地址
本文将讲解docker的基础使用。
1.1 名词解释
名词 | 解释说明 |
---|---|
镜像(image) | docker镜像是一个模板,通过这个模板来创建多个容器服务 |
容器(container) | Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的 |
仓库(repository) | 存放镜像的地方,类似maven仓库。分为共有和私有 |
1.2 docker的安装
2.docker常用命令
2.1 镜像命令
https://docs.docker.com/engine/reference/commandline/images/
命令 | 说明 |
---|---|
docker images | 查看本地所有镜像 |
docker search | 搜索仓库中的镜像 |
docker pull | 下载镜像 |
docker rmi | 删除镜像 |
2.2 容器命令
https://docs.docker.com/engine/reference/commandline/container
命令 | 说明 |
---|---|
docker run[可选参数] image | 新建容器并启动 –name 容器名字 -d 后台方式运行 -it 使用交互方式运行,进入容器查看内容 -p 指定容器端口 e g:8080:8080 |
docker ps | 查看所有正在运行的容器 -a 会显示历史运行过的容器 -n=? 显示最近创建的容器 -q 只显示容器的编号 |
exit | 停止退出交互模式容器 |
Ctrl + P + Q | 不停止退出容器 |
docker rm | 删除容器(不能删除正在运行的容器,需要加-f) docker rm -f $(docker ps -aq) 删除所有容器 |
docker start [container id] | 启动容器 |
docker restart [container id] | 重启容器 |
docker stop [container id] | 停止当前运行容器 |
docker kill [container id] | 强制停止当前容器 |
2.3 常用其他命令
命令 | 说明 |
---|---|
docker logs | 查看日志 |
docker top | 查看容器中进程信息 |
docker inspect | 查看容器元数据 |
docker exec -it [容器id] /bin/bash | 进入当前正在运行的容器(新的终端) |
docker attach | 进入当前正在运行的容器(容器正在执行的终端) |
docker cp 容器id:容器内路径 目的主机路径 | 从容器内拷贝文件到主机 |
3.commit一个镜像到本地
命令:
docker commit -a="作者名" -m="commit info" [容器id] [镜像名称]:[TAG版本]
(二)docker-容器数据卷
1.概述
简单来说就是解决将容器中的数据保存到本机的问题(或者容器之间的数据互通问题),实际内容就是将容器目录挂在到本机目录。
命令:
docker run -v 主机目录:容器目录
通过我们都会使用这个,将数据存储不放在容器中(因为一旦替换了会导致数据丢失),数据放在专门存储数据的地方,容器是负责功能。
# 查看docker所有的数据卷挂载信息
docker volume
2.写在dockerfile中的挂载信息
命令:
...
# 这个地方使用的是匿名挂载 使用inspect可以查看到具体挂载信息;
VOLUME ["volume01", "volume02"]
...
3.数据卷容器
实现容器之间数据同步
容器2 继承 容器1的挂载配置
docker run --name [容器2] --volumes-from [容器1]
(三)dockerfile
1.概述
Dockerfile 就是用来构建 docker 镜像的构建文件。
docker build -f [dockerfile文件地址] -t [镜像名称]:[版本]
- 如果dockerfile文件名是“Dockerfile”,可以不用-f指定,默认加载
2.dockerfile 构建过程
- 编写dockerfile
- docker build
- docker run
- dockers push
3.dockerfile常用命令
FROM #基础镜像,基础镜像必须是小写,否则会 invalid reference format: repository name must be lowercase
MAINTAINER #维护者信息
ADD #往镜像中添加
COPY #类似ADD,往镜像中拷贝东西
RUN #构建时运行的指令
CMD #启动时默认运行的指令,如果指定了其他执行命令或者用了ENTRYPOINT,CMD就不会执行
ENTRYPOINT #容器启动时运行的指令,追加
ONBUILD #这个镜像被继承时,触发的动作
ENV #设置镜像的环境变量
WORKDIR #指定镜像的工作目录,进去容器默认的目录
EXPOSE #暴露端口
VOLUME #卷挂载,无法指定宿主机的对应目录,只能随机生成,VOLUME ["/data1","/data2"]
4.发布镜像
DockerHub
docker login [仓库地址] #登录仓库,不带地址默认为docker hub,带地址则表示登录登录指定仓库,一般后者用的多
docker logout #登出
docker save #保存镜像到本地,比如备份成tar包
docker tag 镜像id #给镜像重新打tag
docker push