Docker

Docker

  • 1.认识Docker
  • 2.总结
  • 3.Docker安装
  • 4.Docker命令
  • 5.容器命令
  • 6.数据卷
  • 7.自定义镜像
    • 1.镜像结构
    • 2.Dockerfile
    • 3.DockerCompose
  • 8.镜像仓库
    • 1.创建自定义镜像仓库
    • 2.私有镜像仓库的推送和拉取

1.认识Docker

Docker是一个快速交付应用、运行应用的技术:

  1. 可以将程序及其依赖、运行环境一起打包为一个镜像,
    可以迁移到任意Linux操作系统
  2. 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
  3. 启动、移除都可以通过一行命令完成,方便快捷

Docker和虚拟机的差异:

  • docker是一个系统进程;虚拟机是在操作系统中的操作系统. docker体积小、启动速度快、性能好;
  • 虚拟机体积大、启动速度慢、性能一般

Docker是一个CS架构的程序,由两部分组成:

  • 服务端(server): Docker守护进程,负责处理Docker指令,管理镜像、容器等
  • 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/2Docker_第1张图片

2.总结

镜像:
将应用程序及其依赖、环境、配置打包在一起
容器:
镜像运行起来就是容器,一个镜像可以运行多个容器
Docker结构:
服务端∶接收命令或远程请求,操作镜像或容器
客户端:发送命令或者请求到Docker服务端
DockerHub:
·一个镜像托管的服务器,类似的还有阿里云镜像服务,统称为DockerRegistry

3.Docker安装

docker安装

4.Docker命令

Docker_第2张图片
拉取nginx镜像

docker pull nginx

查看所有镜像

docker images

保存镜像到压缩包nginx.tar

docker save -o nginx.tar nginx

删除镜像

docker rmi nginx

加载压缩包为镜像

docker load -i nginx.tar

5.容器命令

Docker_第3张图片

1.创建并运行一个Nginx容器

docker run --name mn -p 80:80 -d nginx

-p [宿主机端口]:[虚拟机端口]
2.查看运行中的容器

docker ps

3.跟踪日志

docker logs

4.进入容器内执行命令

docker exec -it mn bash

Docker_第4张图片
5.停止容器

docker stop mn

6.查看所有容器

docker ps -a

7.启动容器

docker start nm

8.强制删除nm容器

docker rm -f nm

6.数据卷

数据卷的作用:

  1. 将容器与数据分离,解耦合
  2. 方便操作容器内数据
  3. 保证数据安全

数据卷操作:
docker volume create
docker volume ls
docker volume inspect
docker volume rm
docker volume prune

用一个案例来练习数据卷的挂载
将nginx的html文件挂载到本机的真实目录(默认/var/lib/docker/volumes/)下

1.创建并运行一个Nginx容器

docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx

-v html:/usr/share/nginx/html表示把nginx容器中的数据挂载到数据卷中
2.查看所有容器

docker ps

3.查看数据卷位置

docker inspect html

4.进入数据卷目录

cd /var/lib/docker/volumes/html/_data

5.查看是否成功挂载

ls

6.用编辑器进行修改

总结:

  1. docker run的命令中通过-v参数挂载文件或目录到容器中
  • -v 数据卷名称:容器内目录
  • -v 宿主机文件:容器内文件
  • -v 宿主机目录:容器内目录
  1. 数据卷挂载与目录直接挂载的区别
    1. 数据卷挂载耦合度低,由docker来管理目录,但是
      目录较深,不好找
    2. 目录挂载耦合度高,需要我们自己管理目录,不过目
      录容易寻找查看

7.自定义镜像

1.镜像结构

镜像是分层结构,每一层称为一个Layer

  • Baselmage层:包含基本的系统函数库、环境变量、文件系统
  • Entrypoint:入口,是镜像中应用启动的命令
  • 其它:在Baselmage基础上添加依赖、安装程序、完成整个应用的
    安装和配置

2.Dockerfile

Docker_第5张图片

  1. Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
  2. Dockerfile的第一行必须是FROM,从一个基础镜像来构建
  3. 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如: java:8-alpine

1.先创建一个目录,把这两个文件导入进去:
Docker_第6张图片
Dockerfile:

# 指定基础镜像
From java:8-alpine
#拷贝jar包作为入口
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

2.构建镜像

docker build -t web:1.0 .

3.启动镜像

docker run --name myweb -p 8090:8090 -d web:1.0

3.DockerCompose

DockerCompose其实就是一个文本文件,通过指令定义集群中的每个容器中如何运行。相当于把docker run命令转换成了yaml文件来执行。
dockerCompose

8.镜像仓库

除了DockerHub这样的官方仓库如阿里云等等,我们还可以自定义仓库用来存放镜像

1.创建自定义镜像仓库

1.在安装了DockerCompose后
2.先配置Docker信任地址:

# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.150.101:8080"]

3.建一个目录存放ui

 mkdir /tmp/registry-ui

4.建一个yml文件

cd /tmp/registry-ui/
touch docker-compose.yml

5.使用DockerCompose部署带有图象界面的DockerRegistry,命令如下:
docker-compose.yml的内容如下:

version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - ./registry-data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=My Registry
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry

6.运行仓库

docker-compose up -d

7.随后访问虚拟机ip:8080即可访问了!

2.私有镜像仓库的推送和拉取

1.重新命名本地镜像,名称前缀为私有仓库的地址:192.168.239.131:8080/

docker tag nginx 192.168.239.131:8080/nginx

2.推送镜像

docker push nginx 192.168.239.131:8080/nginx

3.拉取镜像

docker pull nginx 192.168.239.131:8080/nginx

你可能感兴趣的:(docker,docker,容器,运维)