是一个开源的应用窗口引擎 是使用水箱机制,相互隔离 性能开销极低 ce版 ee版
docker 安装 yum update 安装依赖 yum insta -y yum-utils device-mapper-persistent-data lvm2 安装yum源 yum-config-manager --add-repo https://download.docker.com/linux/cents/docker-ce.repo yum install docker-ce -y docker -v
-- docker架构 client hosts registries
docker命令 启动/停止/重启/status systemctl start/restart/stop/status docker
镜像相关的命令 docker images 查看 docker search redis 搜索 docker pull redis 拉取 docker pull redis:5.0 docker rmi (id) 删除 docker rmi redis:latest docker images -q docker rmi 'docker images -q' 删除所有
容器相关命令 docker run -it --name=c1 centos:7 /bin/bash -创建容器 docker run
docker run -id --name=c2 centos:7 -创建容器后不自动进入 -d退出后不自动关闭 docker ps -a -查看所有的容器 docker exec -it c2 /bin/bash -进入容器 docker exec -退出容器 但不会关闭 docker start/stop c2 docker rm c2 -删除c2 docker rm 'docker ps -aq' -删除全部 docker inspect c2 -查看容器的详细信息
数据卷概念 容器删除后,在容器中的数据还在吗 外部机器和容器不能通 容器挂载一个宿主机上的数据卷目录 docker run ... -v 宿主机目录:容器内目录 -目录没有会自动创建 -目录必须是绝对路径 docker run -it --name=c1 -v /root/data:/root/data_container centos:7 /bin/bash docker run -it --name -c2 \ -v ~/data2:/root/data2 \ -v ~/data3:/root/data3 \ entos:7 -挂载两个目录
两个容器挂载同一个目录 docker run -it --name=c3 -v ~/data:root/data centos:7 docker run -it --name=c4 -v ~/data:root/data centos:7
c3创建数据卷 容器的目录路径不写默认会自动创建/var/lib/docker/volumes docker run -it --name=c3 -v /volume centos:7 /bin/bash c1,c2挂载到c3 docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash docker run -it --name-c2 --volumes-from c3 centos:7 /bin/bash
数据卷容器 1.创建启动c3数据卷容器,使用-v参数,设置数据卷 docker run -it --name=c3 -v /volume centos:7 /bin/bash
2.创建启动c1c2容器,使用--volumes-from 参数,设置数据 卷 docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash -c1和c3绑定 docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash docker insepect c1 -查看详细
----- docker应用部署 docker 中部署mysql 搜索mysql 拉取mysql 创建容器 操作容器中的mysql
外部主机 - 宿主主机 - docker/mysql -通过端口映射使外部机能访问docker/mysql
docker run -d \
-p 3307:3306\
--name=c_mysql \
-v $pwd/conf:/etc/mysql/conf.d \ -要映射的目录
-v $pwd/log:/logs \
-v $pwd/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
mkdir mysql cd mysql docker run -id \ 创建容器 eocker exec -it c_mysql /bin/bash -进入 mysql -uroot -p123456 create database db1; 测试: 外部主机用sqlyog 连接到docker数据库
---- tomcat 部署 搜索tomcat 拉取tomcat
mkdir ~/tomcat cd ~/tomcat
docker run -id --name=c_tomcat \ -p 8080:8080 \ -v $pwd:/usr/local/tomcat/webapps \ -将主机中当前目录挂载到容器的webapps tomcat
--- nginx 部署 搜索 拉取
mkdir ~/nginx cd ~/nginx
docker run -id --name=c_nginx \ -p 80:80 \ -v $pwd/conf/nginx.conf:/etc/nginx/nginx.conf \ -v $pwd/logs:/var/log/nginx \ -v $pwd/html:/usr/share/nginx/html \ nginx
---- redis 部署 搜索 docker search redis 拉取 docker pull redis:5.0
创建容器,设置端口映射 docker run -id --name=c_redis -p 6379:6379 redis:5.0 使用外部机连接redis redis-cli.exe -h 192.168.149.135 -p 6379
---- docker file docker 镜像原理
dockerfile概念及作用
--- dockerfile 镜像制作 和 还原
docker commit 容器id 镜像名称:版本号 -容器转为镜像 docker commit id cp_tomcat:1.0 docker images -查看
docker save -o 压缩文件名称 docker save -o cp_tomcat:1.0.tar ll -查看
docker rmi (id)
docker load -i cp_tomcat:1.0.tar docker images -查看
注: 还原以后挂载的目录不能生效
dockerfile 的 常用命令 from 指定基镜像 maintainer 指定维护者信息,可以没有 run docker使命今生效需要在前面加run add 添加宿主机的文件到容器内,有自动解压的功能 copy 和copy一样,但没有自动解压的功能 workdir 设置当前目录 volume 设置巻,挂载主机目录 expose 指定对外的端口 cmd 指定容器启动后要做的事情
dockerfile 案例 需求: 自定义centos7镜像 默认登录路径为 /usr 可以使用vim 实现步骤 定义父镜像 FROM center:7 定义作者信息: MAINTAINER abcabc@123.com 执行安装vim命令: run yum install -y vim 定义默认的工作目录: workdir /usr 定义容器启动执行的命令: cmd/bin/bash
mdkir docker-files cd docker-files vim c_dockerfile FROM centos:7 MAINTAINER abc abc@123.com RUN yum install -y vim WORKDIR /usr cmd /bin/bash :wq
docer build -f ./ c_dockerfile -t abc_centos:1 . -执行会按照上面的文件安装配置
验证 docker run -t --name=c2 abc_centos:1
案例2 需求: 定义dockerfile,发布springboot项目 步骤: 安义父镜像:FROM java:8 定义作者信息: MAINTAINER abcabc@123.com 将jar包添加到容器: ADD springboot.jar app.jar 定义容器启动执行的命令: CMDjar -jar app.jar 通过docerfile构建镜像: docer bulid -f dockerfile 文件路径 -t 镜像名称:版本
mdkir docker-files cd docker-files 把java8放在当前目录 vim c_dockerfile FROM centos:7 MAINTAINER abc abc@123.com ADD springboot-hello-0.0.1-SANPSHOT.jar -项目名称 CMD java -jar app.jar :wq
docker build -f ./springboot_dockerfile -t app . docker images -可见生成容器app
docker run -id -p 9000:8080 app
docker ps -a -查看
------ docker compose 服务编排 是一个分布式部署的工具 利用dockerfile定义运行环境镜像 使用docker-compose.yml定义组成应用的各服务 运行docker-compose up 启动应用
docker compose 安装和使用 docker-compose -v
mkdir docker-compose cd docker-compose
vim docker-compose.yml -名字是固定的 viersin: '2' services: nginx: image:ngin ports:
mkdir -p ./nginx/conf.d cd ./nginx/conf.d/ vi nginx.conf lcation / { proxy_pass http://app:8080; }
docker-compose up -自动创建两个容器
--- docker 私有仓库 搭建私有仓库
拉取私有仓库镜像 docker pull registry
启动 docker ru -id --name=registry -p 5000:5000 registry
打开浏览器 http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]}表示私有仓库搭建成功
修改daemon.json -添加一个key,用于让docker人生私有仓库地址 vim /etc/docker/daemon.json {“insercure-registries”:["私有仓库服务器ip:5000"]}
重启docker 服务 systemctl restart docker docker start registry
-- 上传私有镜像 docker images docker tag centos:7 192.168.149.135:5000/entos:7 docker push 192.168.149.135:5000/entos:7
docker start registry -启动私有仓库
拉取私有镜像 docker pull 192.168.149.165:5000/entos:7
docker和虚拟机的比较
包含所有的内容: 代码,运行环境,系统工具,系统库存和设置
-完