1. docker的概念
Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。
docker是为了解决:
- 1, 解决环境不一致问题
- 2, 在多用户的操作系统下,会相互影响
- 3, 解决用户量暴增,运维成本问题
- 4, 学习一门新技术,技术环境成本过高
2. 安装docker
macOS 我们可以使用 Homebrew 来安装 Docker。
brew install --cask --appdir=/Applications docker
大约要输入两次密码(打开docker app图标还需要输入一次密码),
打开app后就可以从操作界面上看到操作docker的内容,也可以使用bash命令行来操作docker
;以下主要操作命令行来示范
由于国内网络问题, 所以是需要指定下载镜像的镜像源 如阿里的镜像源:
第1步 查看镜像源:
sudo docker info | grep Registry
第2步 修改镜像源:
点击setting图标,配置路径:Preferences -> Docker Engine。添加如下配置,上面是 docker 官方国内源,下方为中科大国内 docker 镜像源
{
"features": {
"buildkit": true
},
"experimental": false,
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
3. docker的基本操作
1. 查看docker版本
docker --version
2. 启动docker
1. 点击鲸鱼图标启动
2. 运行命令行启动
open /Applications/Docker.app
3. run命令 拉取并运行镜像成为一个容器
docker run hello-world
4. docker的中央仓库(注册中心)
有其他用户上传的镜像集中地,分为几种:
- 1 . docker官方镜像 ,在国外速度慢
- 2 . 阿里云 网易蜂巢 daocloud
(http://hub.daocloud.io/)- 3 . 公司会采用私服的方式拉去镜像(添加配置)
需要在 /etc/docker/daemon.json下添加如下配置(若没有需要添加)
{
"registry-mirrors":["xxxx"], #镜像加速的地址,增加后在 docker info中可查看。
"insecure-registries": ["ip: import"], #配置docker的私库地址
}
并重启 两个服务, docker和daemon
4. 镜像操作
1. 拉取镜像到本地
docker pull 镜像名称[:tag]
实际操作 需要取镜像网站获得到镜像加速的地址,例如:daocloud.io/library/tomcat:8.0.21-jre7
实际命令为:
docker pull daocloud.io/library/tomcat:8.0.21-jre7
2. 查看全部本地镜像
docker images
3. 删除本地镜像 rm remove, i 代表镜像 , 唯一标识为区别于其他的镜像image-id,不用写全 只要能区分就行
docker rmi 镜像的标识
注意:拥有容器的镜像不能删除, 需要先删除容器
4. 本地镜像的导入导出(不规范)
1.导出到本地
docker save -o 本地导出路径 镜像id
实际例子 需要 重命名镜像名字
docker save -o /Users/wangrong/Desktop/docker练习/tomcat 1
2. 本地导入到docker
docker load -i 镜像文件
实际例子 被上传后没有 REPOSITORY 和 TAG 还有images还是和以前一样
docker load -i /Users/wangrong/Desktop/docker练习/tomcat
3, 给镜像改名字
docker tag 镜像id 修改后的名字(REPOSITORY):版本 (tag)
docker tag 1cc tomcat:1.1
5. 容器操作 (容器就是启动起来的镜像 )
1,运行镜像
# 简单语法
##(镜像名称[:tag]这种形式启动话 如果本地有 就会直接运行,没有会下载后在直接运行)
docker run 镜像id|镜像名称[:tag]
# 复杂语法 -d 后台运行容器,并返回容器ID; -p(小写)则可以指定要映射的IP和端口
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像id|镜像名称[:tag]
## 实际复杂语法的例子
docker run -d -p 3000:80 --name vueApp vuenginx:latest
2, 查看正在运行的容器
# -a all全部 -q 只查看容器的标识 可以混用
docker ps 【-aq】
3,查看容器的日志
# -f 可以滚动查看日志后面几行
docker logs -f 容器id
# 实际例子
docker logs -f fa
4,进入到容器内部
# -i 选项指示 docker 要在容器上打开一个标准的输入接口,-t 指示 docker 要创建一个伪 tty 终端,连接容器的标准输入接口,之后用户就可以通过终端进行输入
docker exec -it 容器id bash
docker exec -it fa bash
5,退出容器
exit
6, 删除容器,删除容器前需要先停止运行中的容器
# 删除一个容器
docker rm 容器id
# 删除全部容器
docker rm $(docker ps -qa)
7, 停止容器运行
# 停止一个容器
docker stop 容器id
# 停止全部容器
docker stop $(docker ps -qa)
8, 启动容器
docker start 容器id
6.数据卷的操作 主要是映射容器内部方便操作; 比较专业 ,我这边应用场景不多,暂时就不储备了,时间也不太允许
7. 自定义docker镜像 没有后缀
基本原理: 需要在docker环境下, 在项目中新建Dockerfile文件,来进行相对应的配置,一般有如下配置:
# 1. FORM 依赖什么其他镜像 例如web前端应用的部署需要nginx
# 2. COPY 拷贝相对路径下内容复制到镜像内
# 3. WORKDIR 指定镜像的工作目录
# 4. CMD 需要运行的命令(多个只会执行一个)
###### 实际文件代码######
FORM nginx
COPY ./dist usr/etc/nginx/html/
WORKDIR /
CMD ["npm", "run", "build"]
最后在docker环境下打包镜像,命令如下:
# -t 为容器重新分配一个伪输入终端
docker build -t 镜像名称:tag版本号
docker build -t vueApp:1
8. docker-compose
1. 使用docker-compose的原因
docker-compose负责实现对Docker容器集群的快速编排,解决Dockerfile只能编译一个镜像&容器的问题,Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。
2. 安装docker-compose
brew install docker-compose
安装完成可以使用docker-compose -v 验证是否安装成功
3. docker-compose配置文件.yml 编写的格式
yml 以key: value的格式方式指定配置信息,多个配置信息以换行+缩进的方式来区分,key的冒号后必须有空格,字符串必须是单引号,不要使用制表符tab只用空格
version: '3.1' # 指定了 compose file 的版本
services: # 容器服务
mysql:
restart: always # 启动docker就运行
image: daocloud.io/library/mysql:5.7.7 # 镜像版本
container_name: mysql # 名称
ports: # 端口
- 3306:3306
volumes: # 数据卷映射到本地
- /Users/wangrong/Desktop/docker练习/mysql:/var/lib/mysql
tomcat:
restart: always
image: daocloud.io/library/tomcat:8.0.21-jre7
ports:
- 8080:8080
volumes:
- /Users/wangrong/Desktop/docker练习/tomcat:/usr/local/tomcat/webapps # 进入容器内部发现后面这个路径
4. 使用docker-compose管理文件, 下载并且运行命令
docker-compose up -d
5. 使用docker-compose管理文件, 删除容器
docker-compose down
6. 开启或关闭由docker-compose维护的容器
docker-compose start|stop|restart
7. 查看由 docker-compose 管理的容器
docker-compose ps
8. 查看docker-compose的日志
docker-compose logs -f
9.使用 docker-compose和Dockerfile 一起管理自定义镜像容器
- docker-compose.yml
version: '3.1' # 指定了 compose file 的版本
services: # 容器服务
vueNginx:
restart: always # 启动docker就运行
build:
context: ./ # 当前路径
dockerfile: Dockerfile # 使用当前的Dockerfile取编排镜像
image: vueapp1 # 镜像版本
ports: # 端口
- 80:80
- Dockerfile
FROM nginx
COPY dist/ /usr/share/nginx/html/
COPY nginx/default.conf /etc/nginx/conf.d/default.conf
- 运行命令启动
docker-compose up -d
10. 重新构建自定义镜像
docker-compose build
11. 运行前重新构建
docker-compose up -d --build