赞
踩
目录
概念:dockerfile 是用来构建docker镜像的文件
使用docker compose编排nginx+springboot项目
Docker可以运行在在MAC、Windows、CentOS、UBUNTU等操作系统上
官网:
https://www.docker.com
- # 1. yum包更新到最新
- yum update
-
- # 2. 安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
- yum install -y yum-utils device-mapper-persistent-data lvm2
-
- # 3. 设置yum源
- yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
-
- # 4. 安装docker,出现输入的界面都按 y
- yum install -y docker-ce
-
- # 5. 查看docker版本,验证是否成功
- docker -v
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像====》tomcat容器(提供服务器),
通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器的)
Docker利用容器技术,独立运行一个或者一个组应用,Docker容器是通过Docker镜像来创建的。目前就可以吧这个容器理解为一个简易的linux系统
仓库就是存放镜像的地方!仓库分为共有仓库和私有仓库!
概念 | 说明 |
---|---|
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (Develop with Docker Engine SDKs | Docker Documentation) 与 Docker 的守护进程通信。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
1、登入阿里云,找到容器镜像服务
2、找到镜像加速地址
3、配置使用
复制2中的命令依次执行
容器就是将软件打包成标准化单元,以用于开发、交付和部署
相同:
不同:
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
性能 | 接近原生 | 弱于 |
系统支持两 | 单机支持上千个容器 | 一般几十个 |
- # 启动docker容器
- systemctl start docker
-
- # 停止docker容器
- systemctl stop docker
-
- # 重启docker容器
- systemctl restart docker
-
- # 查看docker容器状态
- systemctl status docker
-
- # 设置开机自启动docker容器
- systemctl enable docker
- # 1、查看本地镜像
- docker images
- docker images -q # 查看所有镜像的id
-
- # 2、搜索镜像(从网络中查找)
- docker search 镜像名称
- docker search 镜像名称 --filter=stars=3000 #过滤出收藏量大于3000的镜像
-
- # 3、拉取镜像
- docker pull 镜像名称:版本号 #如果没有写版本号,默认拉取最新的laster版本
-
- # 4、删除镜像
- docker rmi 镜像id/镜像名称:版本号 #删除指定的本地镜像
- docker rmi `docker images -q` #删除本地的所有镜像
- # 1、创建容器
- docker run 参数 容器名称:版本号 /bin/bash
- /bin/bash 代表创建容器后立即进入容器
- 参数说明:
- -i: 以交互模式运行容器(保持容器运行),如果参数为-it,容器创建后自动进入容器中,退出容器后,容器自动关闭
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
- -d: 后台运行容器,并返回容器ID,需要使用docker exec目录进入容器,退出容器后,容器不会自动关闭
- --name : 为容器指定一个名称
- -v 宿主机目录:容器目录 :给容器绑定一个数据卷(可以使用多个-v绑定多个数据卷)
- -e:设置环境变量
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-
- # 2、查看容器
- docker ps # 查看正在运行的容器
- docker ps -a # 查看所有的容器
-
- # 3、进入容器
- docker exec -it 容器名/容器id bash
-
- # 4、退出容器
- exit
-
- # 5、启动容器
- docker start 容器名/容器id
-
- # 6、删除容器
- docker rm 容器名/容器id
- docker rm `docker -ps -aq` #删除所有的容器
-
- # 7、查看容器进程
- docker top 容器名/容器id
-
- # 8、查看容器信息
- docker inspect 容器名/容器id
-
- # 9、查看容器日志
- docker logs 参数 容器名/容器id
- 参数说明:
- -f :跟踪输出
- -t :显示时间戳
- --tail 10 :显示日志的行数为10
- --since:"2022-05-16" :显示某个日期至今的所有日志

1、概念:
2、作用:
3、创建启动容器时,配置数据卷:
docker run ... -v 宿主机目录(文件):容器内目录(文件) ...
注意事项:
4、数据卷容器
-v
参数 设置数据卷docker run -it --name=c3 -v /volume centos:7 /bin/bash
创建启动c1 c2容器,使用--volumes-from
参数 设置数据卷
- 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、拉取mysql5.7镜像
- docker pull mysql:5.7
-
- # 2、创建并启动容器(设置端口号、root账号密码、数据卷)
- docker run -id -p 3307:3306 --name myMysql -v /root/docker_data/mysql/conf:/etc/mysql/conf.d -v /root/docker_data/mysql/logs/:/logs -v /root/docker_data/mysql/data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
-
- 参数说明:
- -p 3307:3306:将容器的3306端口映射到宿主机的3307端口
- -v /root/docker_data/mysql/conf:/etc/mysql/conf.d :将宿主机的/root/docker_data/mysql/conf目录挂载到容器的/etc/mysql/conf.d目录
- -v /root/docker_data/mysql/logs/:/logs:将宿主机的/root/docker_data/mysql/logs/目录挂载到容器的/logs目录
- -v /root/docker_data/mysql/data/:/var/lib/mysql:将宿主机的/root/docker_data/mysql/data/目录挂载到容器的/var/lib/mysql目录
- -e MYSQL_ROOT_PASSWORD=123456:初始化root 用户密码
- # 1、拉取tomcat镜像
- docker pull tomcat
-
- # 2、创建并启动容器(设置端口号、数据卷)
- docker run -id -p 8008:8080 -v /root/docker_data/tomcat/webapps/:/usr/local/tomcat/webapps --name myTomcat tomcat:latest
-
- 参数说明:
- -p 8008:8080:将容器的8080端口映射到宿主机的8008端口
- -v /root/docker_data/tomcat/webapps/:/usr/local/tomcat/webapps:将宿主机的/root/docker_data/tomcat/webapps/目录挂载到容器的/usr/local/tomcat/webapps目录
- # 1、拉取nginx镜像
- docker pull nginx
-
- # 2、创建nginx的配置文件
- mkdir /root/docker_data/nginx/conf/nginx
- vim nginx.conf
-
- # 3、将配置写在nginx.conf中
-
- # 4、创建并启动容器(设置端口号、数据卷)
- docker run -id --name myNginx -p 80:80 -v /root/docker_data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/docker_data/nginx/logs:/var/log/nginx -v /root/docker_data/nginx/html:/usr/share/nginx/html nginx:latest
-
- 参数说明:
- -p 80:80:将容器的80端口映射到宿主机的80端口
- -v /root/docker_data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将宿主机的/root/docker_data/nginx/conf/nginx.conf目录挂载到容器的/etc/nginx/nginx.conf目录
- -v /root/docker_data/nginx/logs:/var/log/nginx:将宿主机的/root/docker_data/nginx/logs目录挂载到容器的/var/log/nginx目录
- -v /root/docker_data/nginx/html:/usr/share/nginx/html:将宿主机的/root/docker_data/nginx/html目录挂载到容器的/usr/share/nginx/html目录

nginx.conf中的内容:
- user nginx;
- worker_processes 1;
-
- error_log /var/log/nginx/error.log warn;
- pid /var/run/nginx.pid;
-
- events {
- worker_connections 1024;
- }
-
- http {
- include /etc/nginx/mime.types;
- default_type application/octet-stream;
-
- log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- '$status $body_bytes_sent "$http_referer" '
- '"$http_user_agent" "$http_x_forwarded_for"';
-
- access_log /var/log/nginx/access.log main;
-
- sendfile on;
- #tcp_nopush on;
-
- keepalive_timeout 65;
-
- #gzip on;
-
- include /etc/nginx/conf.d/*.conf;
- }

- # 1、拉取redis镜像
- docker pull redis
-
- # 2、创建并启动容器(设置端口号)
- docker run -id -p 6379:6379 --name myRedis redis:latest
-
- 参数说明:
- -p 6379:6379:将容器的8080端口映射到宿主机的8008端口
由bootfs 和rootfs 两部分组成:
Docker 镜像的本质是什么?
是一个分层的文件系统
Docker 中一个CentOS 镜像为什么只有200MB,而一个CentOS 操作系统的iso 文件要几个G?
CentOS的iso镜像文件包含bootfs和rootfs,而Docker的CentOS镜像复用操作系统的bootfs,只有rootfs和其他镜像层
Docker 中一个Tomcat 镜像为什么有500MB,而一个Tomcat 安装包只有70多MB?
由于Docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所以整个对外暴露的tomcat镜像大小500多MB
- FROM # 基础镜像,就是一切从这里构建 centos
- MAINTAINER # 镜像是谁写的,姓名+邮箱
- RUN # 镜像构建的时候需要运行的命令
- ADD # 步骤,tomcat镜像,这个tomcat压缩包就是添加的内容
- WORKDIR # 镜像的工作目录
- VOLUME # 挂载的目录位置
- EXPOSE # 暴露端口配置 -p
- CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
- ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
- ONBUILD # 当构建一个被继承DockerFil,这个时候就会触发onbuild的指令
- COPY # 类似ADD命令,将我们文件拷贝到镜像中
- ENV #构建的时候设置环境变量! 比如说设置内存大小,mysql的密码
将容器转为镜像
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:版本
将镜像转化为压缩文件
docker save -o 压缩文件名称 镜像名称:版本号
将压缩文件转为镜像
docker load -i 压缩文件名称
案例一:创建一个自己的centos
1、编写dockerfile的配置文件:
- FROM centos
- MAINTAINER 怀揣着梦想出发
-
- ENV MYPATH /usr/local
- WORKDIR $MYPATH
-
-
- #因为centOS8于2021年12月31日停止了源的服务,所以这里直接安装vim和net-tools是会报错的
- #Error: Failed to download metadata for repo ‘AppStream‘: xxxx
-
- RUN cd /etc/yum.repos.d/
- RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
- RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
- RUN yum update -y
- RUN curl -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
- RUN yum clean all
- RUN yum makecache
- RUN find . -name 'CentOS-Linux-*' -exec rm {} \;
- RUN yum -y install vim
- RUN yum -y install net-tools
-
-
-
- EXPOSE 80
-
- CMD echo $MYPATH
- CMD echo "----------------end------------"
- CMD /bin/bash

2、再通过这个文件构建镜像(注意后面有个点)
- #命令格式: docker build -f dockerfile文件路径 -t 镜像名字:【TAG】.
-
- docker build -f mydockerfile-centos -t mycentos:1.0 .
3、查看镜像是否生成
docker images
解决docker加载新的镜像后repository和tag名称都为none的问题
docker tag [image id] [name]:[版本]
4、运行并测试
案例二、定义dockerfile,发布springboot 项目
1、编写dockerfile的配置文件:
- FROM java:8
-
- COPY *.jar /app.jar
- CMD ["--server.port=8080"]
-
- EXPOSE 8008
-
- ENTRYPOINT ["java","-jar","/app.jar"]
-
-
2、通过dockerfile 构建镜像
docker build -f dockerfile文件路径 -t 镜像名称:版本
3、查看镜像是否生成
docker images
4、运行并测试
Docker Compose 是一个编排多容器分布式部署的工具,提供命令集管理器化应用的完整开发期,包括服务构建,启动和停止。使用步骤:
- #Compose 目前已经完全支持Linux、MAC OS、Windows,在安装Compose之前,需要先安装Docker。下面以编译好的二进制包方式安装在Linux中
- curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-'uname -s'-'uname -m' -o /usr/local/bin/docker-compose
- #设置文件可执行权限
- chmod +x /usr/local/bin/docker-compose
- #查看版本信息
- docker-compose -version
- #二进制包方式安装的,删除二进制文件即可
- rm /usr/local/bin/docker-compose
1、创建docker-compose目录
- mkdir ~/docker-compose
- cd ~/docker-compose
2、编写docker-compose.yml
文件
- version: '3'
- services:
- nginx:
- iamge: nginx
- ports:
- - 80:80
- links:
- - app
- volumes:
- - ./nginx/conf.d:/etc/nginx/conf.d
- app:
- image: app
- expose:
- - "8080"
3、创建./nginx/conf.d
目录
mkdir -p ./nginx/conf.d
4、在./nginx/conf.d
目录下编写crisp.conf
文件
- erver {
- listen 80;
- acess_log off;
-
- location / {
- proxy_pass https://app:8080;
- }
-
- }
5、在~/docker-compose
目录下 使用dockers-compose 启动容器
docker-compose up
6、测试访问
http://192.168.187.129/hello
拉取私有仓库镜像
docker pull registry
启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
打开浏览器,输入地址https://ip:5000/v2/_catalog
看到{"repositories":[]}
表示私有仓库搭建成功
修改deamon.json
- vim /etc/docker/daemon.json
- #在上述文件中添加一个key,保存退出。
- #此步用于让docker信任私有仓库地址
- #注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
- {"insecure-registries": ["私有仓库服务器ip:5000"]}
重启docker 服务
- systemctl restart docker
- docker start registry
标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器ip:5000/centos:7
上传标记的镜像
docker push 私有仓库服务器ip:5000/centos:7
- #拉取镜像
- docker pull 私有仓库服务器ip:5000/centos:7
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。