Docker教程基础命令 项目部署 私有仓库搭建

Docker镜像相当于是一个root文件系统

 

Docker镜像的本质:

Linux文件系统有bootfs和rootfs两部分组成

bootfs:包含bootloader(引导加载程序)和kernel(内核)

rootfs:root文件系统 /dev /bin /etc

镜像原理:

由特殊的文件系统叠加而成

最低端是bootfs,并使用宿主机的bootfs

第二层是root文件系统rootfs(基础镜像)

然后再网上可以叠加其他的镜像文件(组成只读镜像,对于里面的镜像不能修改)

当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器

uploading.4e448015.gif转存失败重新上传取消uploading.4e448015.gif正在上传…重新上传取消uploading.4e448015.gif转存失败重新上传取消

 

 

 

 

Docker中一个centos镜像只有200M,而centos操作系统得iso文件有几个G:

Docker中的centos镜像父用了linux的bootfs部分,提供rootfs部分

 

 

制作容器:

uploading.4e448015.gif正在上传…重新上传取消uploading.4e448015.gif转存失败重新上传取消

1.容器转镜像:镜像不能直接传输,只能压缩成压缩文件

打包镜像 docker commit 容器id 镜像名称:版本号

压缩 docker save -o 压缩文件 镜像名称:版本号

还原成镜像 docker load -i 压缩文件名称

 

2.dockerfile

概念:包含一条条指令,每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像

uploading.4e448015.gif正在上传…重新上传取消uploading.4e448015.gif转存失败重新上传取消

 

uploading.4e448015.gif正在上传…重新上传取消uploading.4e448015.gif转存失败重新上传取消

FORM指定父镜像

EXPOST 80 暴露端口

STOPSINGNAL SIDTERM

CMD ["nginx","-g","daemon off;"] 启动nginx的命令

uploading.4e448015.gif正在上传…重新上传取消uploading.4e448015.gif转存失败重新上传取消

 

uploading.4e448015.gif正在上传…重新上传取消uploading.4e448015.gif转存失败重新上传取消

 

uploading.4e448015.gif正在上传…重新上传取消uploading.4e448015.gif转存失败重新上传取消

 

dockerfile实现:

1.定义父镜像 FORM centos:7

2.定义作者信息 MAINTAINER ithe

3.执行安装vim命令 RUN yum install -y vim

4.定义默认的工作目录: WORKDIR/usr

5.定义容器启动执行的命令:CMD/bin/bash

 

执行文件:

docker build -f ./dockerfile -t(命名)it_centos:1 .(代表寻址路径)

 

案例:定义dockerfile 发布springboot项目

1.编辑dockerfile

FROM java:8

MAINTAINER author

ADD demo-0.0.1-SNAPSHOT.jar app.jar

CMD java -jar app.jar

2.构建镜像

docker build -f ./springboot_dockerfile -t app .

3.启动容器

docker run -id -p 1688:1688 app

 

服务编排:

概念:按照一定的业务规则批量管理容器

编排工具:Docker Compose 多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动,停止,

使用步骤:

1.利用Dockerfile定义运行环境镜像

2.使用docker-compose.yml定义组成应用的各服务

3.运行docker-compose up启动应用

 

1.安装docker-compose

2.编写docker-compose.yml文件

version: '3'

services:

nginx:

image: nginx

ports:

- 80:80

links:

- app

volumes:

- ./nginx/conf.d:/etc/nginx/conf.d

app:

image: app

expose:

- "1688"

3.创建nginx配置文件目录

mkdir -p ./nginx/conf.d

4.创建nginx配置文件

vim it.conf

server {

listen 80;

access_log off;

 

location / {

proxy_pass http://app:1688;

}

 

}

5.回到docker-compose文件夹并启动

cd ../../

docker-compose up -d(表示后台运行)

 

Docker私有仓库

一:私有仓库搭建

1.拉取仓库镜像

docker pull registry

2.创建容器

docker run -id --name=registry -p 5000:5000 registry

测试访问:http://ip地址:5000/v2/_catalog,成功访问就代表创建成功

3.修改daemon.json

vim /etc/docker/daemon.json

4.添加仓库地址

"insecure-registries":["139.196.162.249:5000"]

5.重启docker

systemctl restart docker

启动私有库容器:docker start registry

6.标记镜像为私有仓库的镜像

docker tag centos:7 ip地址:5000/centos:7

7.上传标记的镜像

docker push ip地址:5000/centos:7

成功后:

uploading.4e448015.gif正在上传…重新上传取消uploading.4e448015.gif转存失败重新上传取消

从仓库拉取镜像

docker pull ip地址:5000/centos:7

 

 

Docker容器虚拟化与传统虚拟机的区别

容器就是将软件打包成独立软件包,用于开发、交付和部署

uploading.4e448015.gif正在上传…重新上传取消uploading.4e448015.gif转存失败重新上传取消

相同点:

容器和虚拟机具有相似的资源隔离和分配优势

不同:

容器虚拟化的是操作系统,虚拟机虚拟化的是硬件

容器只能运行同一类型系统,虚拟机可以运行不同的操作系统

 

 

 

 

服务操作:

启动 systemctl start docker

查看状态 systemctl status docker

停止 systemctl stop docker

重启 systemctl restart docker

开机启动 systemctl enable docker

 

镜像操作:

查看镜像:docker images

搜索镜像:docker search redis(hub.docker.com查看版本)

拉取镜像:docker pull redis:5.0(默认官方新版本)

删除镜像:docker rmi f0453552d7f2(image id)

删除所有镜像:docker rmi 'docker images -q

 

容器操作:

查看运行的容器:docker ps 查看正在运行的容器 docker ps -a(所有历史的)

创建容器:docker run -it(退出立马关闭容器) --name=c1(容器名字) ubuntu:18.04(镜像和版本) /bin/bash

docker run -id(退出后不会关闭容器) --name=c2(容器名字)

-i保持容器运行

进入容器:docker exec 参数

启动容器:docker start c2

停止容器:docker stop c2

删除容器:docker rm c2

删除所有容器:docker rm 'docker pa -aq'(查看所有容器的命令) 不能删除正在运行的

查看容器信息:docker inspect c2

'

数据卷:

容器删除后容器产生的数据还在吗?

不在 ,docker产生的数据在docker容器里 数据卷数据还在

docker容器和外部机器可以直接交换文件吗?

不能,容器和外部机器网络不互通 数据卷里的数据可以交换

容器之间想要进行数据交互?

 

 

 

定义:数据卷是宿主机中的一个目录或文件,

当容器目录和数据卷目录绑定后,对方修改的数据会立即同步

一个容器可以挂载多个数据卷

一个数据卷可以被多个容器挂载

uploading.4e448015.gif正在上传…重新上传取消uploading.4e448015.gif转存失败重新上传取消

数据卷作用:

容器数据持久化

外部机器和容器间接通信

容器之间的数据交互

 

配置数据卷:

启动容器时使用-v参数设置数据卷:

docker run -it --name=c1 -v /root/data(被挂载的目录):/root/data_container(容器里的目录) ubuntu /bin/bash

挂载多个目录:

docker run -it --name=c2 \

-v /root/data(被挂载的目录):/root/data_container1(容器里的目录) \

-v /root/data(被挂载的目录):/root/data_container2(容器里的目录)\

ubuntu /bin/bash

 

docker部署tomcat

搜索镜像 docker search tomcat

拉取镜像 docker pull tomcat

启动容器并启动项目 docker run -id --name=x_tomcat \

> -p 8080:8080 \ //将容器的8080端口映射到主机的8080端口

> -v $PWD:/user/local/tomcat/webapps\ //将主机中当前目录挂载到容器的/user/local/tomcat/webapps中

> tomcat

 

docker部署nginx

搜索镜像 docker search nginx

拉取镜像 docker pull 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

 

docker部署redis

搜索镜像 docker search redis

拉取镜像 docker pull redis

启动容器docker run -id --name=c_redis -p 6379:6379 redis:5.0

 

 

你可能感兴趣的:(docker)