Docker基本开发技术简介

Docker基本原理简介

docker 是一个开源的应用引擎,开发者可以打包自己的应用到容器里面,然后迁移到其他机器的docker应用中,可以实现快速部署,可以通过镜像,快速恢复服务。

docker是利用Linux内核虚拟化技术(LXC),提供轻量级的虚拟化,以隔离进程和资源。LXC不是硬件的虚拟化,而是Linux内核的虚拟机化,相对传统的虚拟机,节省了很多硬件资源。

docker是Linux原生技术,windows上是通过嵌入一个了Linux虚拟机来实现的。

Docker 安装与常用配置

安装:

docker安装方法详见:https://docs.docker.com/install/linux/docker-ce/ubuntu/

nvidia-docker安装方法详见:https://github.com/NVIDIA/nvidia-docker

配置:

1 使用Docker作为非root用户

将用户添加到docker组,这样不用每次用sudo执行,退出重新登录之后生效

  sudo usermod -aG docker $USER

2 更改docker存储路径目录

docker安装时会创建一个目录/var/lib/docker/ 来存储所有的东西,所以需要大的存储空间,来防止单一磁盘被占满。

步骤:

sudo systemctl stop docker

sudo mv /var/lib/docker /data1/

sudo ln -s /data1/docker /var/lib/docker

sudo systemctl start docker   

3 镜像加速

  加入镜像的方法:

      为了永久性保留更改,您可以修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。

      {

           "registry-mirrors": ["https://<>.mirror.aliyuncs.com"],

      }

   这里加入的是阿里云的源,需要自行去申请加速地址。

Docker container 常用命令

Docker常用命令

docker run #运行容器

例如:

1 docker run -it --gpus all --shm-size 8G --rm -v data_dir:/data repo:tag python test.py arg...

2 docker run -it --rm -p 6080:80 -p 5900:5900  -u 1000:1000   --name ubuntu_vnc dorowu/ubuntu-desktop-lxde-vnc

Docker run 常用选项

--rm #保证在运行完之后自动清理container

-v local_path:container_path #挂载宿主机路径到容器中

-i #交互式运行

-t    #分配tty设备,该可以支持终端登录

-u #指定容器的用户 uid:groupid

-d #后台运行

--name #指定容器名称

-p #指定容器暴露的端口

-m #指定容器的内存上限

Docker 其他常用命令

docker ps  [-a] #当前运行或者是当前存在的已经stop的容器   

docker start containerID  #启动已经stop的容器

docker attach containerID  #进入运行中的容器

docker rmi ImageID #删除镜像

docker rm containerID  #删除容器

docker exec containerID #在容器中运行一个进程

docker logs container #获取容器日志

docker inspect container查看容器的详细信息

docker top container # 查看容器内部的进程

#提取镜像和载入镜像

docker save images:tag | gzip > imagename.tar.gz

docker load < imagename.tar.gz

Nvidia-docker 常用命令:

#### Test nvidia-smi with the latest official CUDA image

docker run --gpus all nvidia/cuda:10.0-base nvidia-smi

# Start a GPU enabled container on two GPUs

docker run --gpus 2 nvidia/cuda:10.0-base nvidia-smi

# Starting a GPU enabled container on specific GPUs

docker run --gpus '"device=1,2"' nvidia/cuda:10.0-base nvidia-smi

docker run --gpus '"device=UUID-ABCDEF,1"' nvidia/cuda:10.0-base nvidia-smi

# Specifying a capability (graphics, compute, ...) for my container

# Note this is rarely if ever used this way

docker run --gpus all,capabilities=utility nvidia/cuda:10.0-base nvidia-smi

Docker image介绍与制作方法

镜像介绍

Docker镜像是一个只读的Docker容器模板,含有启动Docker容器所需的文件系统结构及其内容,因此是启动一个Docker容器的基础。Docker镜像的文件内容以及一些运行Docker容器的配置文件组成了Docker容器的静态文件系统运行环境–rootfs。可以这么理解,Docker镜像是Docker容器的静态视角,Docker容器是Docker镜像的运行状态

镜像制作两种方法

1 在基础镜像中修改然后commit提交修改 。

    基础镜像从docker hub拉取或者是本地已有镜像。

 docker 官方仓库:https://hub.docker.com/

 commit 提交: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

小的依赖升级可以通过这种方式来实现。

使用容器创建镜像。容器就是在镜像层的最上方存在一个可写的容器层。将容器打包镜像,就是将可写容器层变成一个只读的镜像层次,和下层的所有镜像层一起作为新镜像的镜像层。

2 Dockerfile 进行build

   Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

   通过dockerfile build镜像:

     docker build -t name:tag <上下文路径>

   上下文路径:存放在build过程中需要打包给docker 引擎的文件,一般默认讲所有文件组织在一个docker文件夹下,所以不必要的文件不要放在这个路径下。

Dockerfile 常用指令

FROM: 定制的镜像都是基于FROM的镜像。

COPY:  复制指令,从上下文目录中复制文件或者目录到容器里指定路径

RUN:   在容器中运行命令并创建新的镜像层用于执行后面跟着的命令行命令。

ENV:   设置环境变量,容器中使用

ARG:   指定构建镜像时的变量

VOLUME: 定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。docker run 的时候,可以通过-v参数修改挂载点。需要注意的是在这个数据卷中所做的任何修改在之后进行commit时都不会写入到新生成的镜像中。

WORKDIR: 指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在

 

docker 镜像分层结构

Container layer: Copy-on-write可写容器层

Image layers :只读层

容器层保存镜像的变化部分,并不对镜像本身进行任何修改。容器中镜像层是不可变的,如果我们再某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件(只是这个文件在 Docker 容器中不可见了)。

 

Dockerfile build过程中应该注意:

Dockerfile 中的每个指令都会创建一个新的镜像层。

镜像层将被缓存和复用

当 Dockerfile 的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效

某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效

 

查看镜像分层结构:

Docker history ImageName:ID

Docker 网络相关

目前项目中未设置,已阅读,有时间再续。。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是目前比较流行的容器化技术,其优点在于方便管理和部署应用程序。而Halo博客系统是一款基于Java开发的博客系统,其部署过程比较复杂,需要安装JDK、MySQL等依赖。本文将介绍如何使用Docker部署Halo博客系统。 1. 安装Docker 首先需要在服务器上安装Docker,可以参考官方文档进行安装。 2. 创建Docker镜像 将Halo博客系统打包成Docker镜像,可以通过Dockerfile或者docker-compose.yml文件进行创建。在这里我们以Dockerfile为例。 先创建一个空目录,将Halo博客系统的jar包和配置文件拷贝到该目录下: ``` mkdir -p /opt/halo cp -r halo.jar /opt/halo/ cp -r application.properties /opt/halo/ ``` 然后创建Dockerfile: ``` FROM openjdk:8-jre-alpine MAINTAINER yourname <[email protected]> ADD halo.jar /opt/halo/halo.jar ADD application.properties /opt/halo/application.properties WORKDIR /opt/halo CMD ["java", "-jar", "halo.jar", "--spring.config.location=application.properties"] EXPOSE 8888 ``` 其中FROM指定了基础镜像,ADD将jar包和配置文件拷贝到镜像中,WORKDIR指定工作目录,CMD指定应用启动命令,EXPOSE指定容器监听的端口。 使用docker build命令创建镜像: ``` docker build -t halo . ``` 其中halo为镜像名称,可以根据需要自行修改。 3. 启动容器 使用docker run命令启动容器: ``` docker run -d -p 8080:8888 --name halo-demo halo ``` 其中-d表示启动守护进程,-p将容器的8888端口映射到主机的8080端口,--name指定容器名称,halo为镜像名称。 启动成功后,在浏览器中输入http://localhost:8080访问Halo博客系统即可。 以上就是使用Docker部署Halo博客系统的步骤,相信通过这个实战,大家可以更好地了解云原生中Docker的使用和部署。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值