docker 命令 快速入门 实例 无废话(一)
镜像(Image)
docker镜像就好比一个模板,我们可以通过这个模板来创建容器服务,tomcat镜像===>run==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
版本 docker -ce 社区版 -ee 企业版
镜像类型
基础镜像
centos ubuntu alpine
中间件
mysql
编译环境
java
业务镜像 springboot
容器(container)
docker利用容器技术,独立运行一个或者一组应用 通过镜像来创建
启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的linux系统
仓库(repository)
仓库就是存放 镜像(image)的地方!
仓库又可以分为 公有仓库和私有仓库
标签 tag
标识定位镜像
docekr Daemon docker 引擎 简称 dockerd 镜像构建
Runc : run container 创建容器运行的cli 工具 容器启动后会退出
shim 进程 父进程 保护 输入输出流 进程
查看镜像列表
docker images
唯一确定镜像 镜像id 仓库:tag
获取镜像
从仓库拉取
docker pull **(docker.io/library/)nginx(仓库)**:alpine
docker images
本地构建
docker build . -t my-nginx:ubuntu -f Dockerfile
通过镜像启动容器
docker run --name my-nginx-alpine(容器) -d **nginx:alpine** (镜像) -d后台运行
镜像有id 容器也有id 容器id 很长 镜像id 很短
docker ps 查看容器
进入容器执行命令
docker exec 容器名称 容器里面要执行的命令
例子:docker exec my-nginx-alpine ls
docker exec -it 容器名称 进入容器里面
例子:docker exec -it my-nginx-alpine /bin/bash
查看进程 ps aux
docker怎么知道容器启动后该执行什么命令?
创建Dockerfile
FROM (docker.io/library/)ubuntu 容器的基础镜像模板来源
RUN apt-get update && apr install -y nginx 镜像里面要执行什么命令
CMD ["/usr/bin/nginx","-g","daemon off;"] 启动容器时执行该命令
CMD 的内容就是 docker ps 中 COMMAND 的内容 代表怎么启动这个nginx 的命令
构建本地镜像
docker build . -t my-nginx:ubuntu -f Dockerfile -t指定镜像的tag .就是 ./ Dockerfile的路径
使用新镜像启动容器
docker run --name my-nginx-ubuntu(容器) -d **my-nginx:ubuntu(镜像)**
docker exec -it my-nginx-ubuntu /bin/bash
ps aux
如何访问容器内部服务
docker exec -it my-nginx-ubuntu /bin/bash
ps aux|grep nginx
curl localhost:80 curl命令是一个利用URL规则在命令行下工作的文件传输工具
curl命令是一个网络工具,其主要作用是通过http、ftp等方式下载文件,也能够上传文件
但是这个服务只有在容器内部访问因为容器没有ip,所以要在外部也能访问
docker rm -f my-nginx-alpine 删掉旧服务重新启动
docker run --name my-nginx-ubuntu -d -p 8080:80 nginx:ubuntu
-p 就是端口映射 8080是外部端口
curl 192.168.0.1:8080
导出镜像到文件中
docker save -o nginx-alpine.tar nginx:alpine
从文件中加载镜像
docker load -i nginx-alpine.tar
docker info 查看仓库地址
仓库服务
官方提供了一个镜像 用那个镜像启动容器 可以提供仓库服务,进行拉取 和 推送镜像
docker run -d -p 5000:5000 --restart always --name registry(容器) registry:2(镜像)
如果本地没有这个镜像会自动去拉取
--restart always(重启后自动启动,别的镜像在docker重启后会退出)
上传本地镜像到本地仓库 然后通过本地仓库推送到远程仓库
先打标签
docker tag **nginx:alpine** localhost:5000/**nginx:alpine**(镜像名字) localhost:5000就是本地仓库
docker push localhost:5000/nginx:alpine(本地仓库中的镜像的地址)
因为镜像地址就是 仓库/xxx/ xxx:latest
查看本地仓库里面的元数据
curl -X GET http://192.168.0.1:5000/v2/_catalog 查看镜像
["nginx"]
curl -X GET http://192.168.0.1:5000/v2/nginx/tags/list 查看标签
删除镜像rmi
docker rmi nginx:alpine(或者id 是删元数据如果有多个的话)
查看容器运行状态
docker ps
查看全部状态容器列表
docker ps -a
容器内存资源限制
docker run --memory=500m nginx:alpine
有状态无状态
mysql 数据是和进程绑定的 所以是有状态的
nginx 无状态
容器数据持久化
挂载目录
docker run --name nginx -d -v /opt:/opt nginx:alpine
-v (volume 数据卷) 宿主机数据卷:容器内部数据卷
docker run --name mysql -d -v /opt/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=12345
mysql:5.7
主机和容器之间传输数据
docker cp /temp/test.txt nginx:/temp
docker exec -it nginx cat /temp/test.txt
容器拷贝到主机
docker cp nginx:/temp/test.txt ./
挂载已有数据,重新创建镜像仓库容器
tar zxf registry.tar.gz -C /opt
docker rm -f registry 删除仓库容器
docker run -d -p 5000:5000 --restart always -v /opt/registry:/var/lib/registry
--name registry registry:2