网站建设公司的工资,深圳建筑网站,了解龙岗网站建设,郑州做网站的联系方式文章目录 前言一、docker是什么#xff1f;docker介绍docker指令 二、docker有什么用#xff1f;三、docker怎么用#xff1f;FROMMAINTAINERRUNENVWORKDIRCOPY、ADDUSEREXPOSE实例 四、docker注意事项docker容器中使用某些宿主机设备时需要额外的权限docker容器中文件内容中… 文章目录 前言一、docker是什么docker介绍docker指令 二、docker有什么用三、docker怎么用FROMMAINTAINERRUNENVWORKDIRCOPY、ADDUSEREXPOSE实例 四、docker注意事项docker容器中使用某些宿主机设备时需要额外的权限docker容器中文件内容中文出现乱码dockerfile使用不了软件源地址解析失败docker容器ssh连接问题 前言 嗨喽大家好。本篇文章主要记录博主在学习docker以及编写dockerfile的过程记录使用docker过程中遇到的问题。 一、docker是什么
docker介绍 Docker 是一种开源的容器化平台用于构建、部署和运行应用程序。它提供了一种轻量级、灵活和可移植的方式来打包应用程序及其依赖项并创建一个独立、隔离的运行环境称为容器。容器是一种虚拟化技术相比传统的虚拟机它更加轻量级和快速。在 Docker 中每个容器都运行在同一主机的操作系统上并共享主机的内核从而减少了资源的占用和启动时间的消耗。使用 Docker您可以方便地将应用程序和其依赖项打包成一个可移植、自包含的镜像文件。这些镜像可以在任何支持 Docker 的环境中部署和运行无论是开发人员的本地机器云平台还是其他服务器。 与虚拟机类似docker需要使用到的容器也是一种虚拟化技术。我们编写dockerfile去实现这个docker镜像的定义通过dockerfile产生一个docker镜像再使用docker镜像创建一个容器来使用。这样看来docker更像一个类型dockerfile产生的镜像与类的作用很相似而容器就是镜像实例化出的对象。
docker指令
# 运行创建一个容器具体的选项可以查找资料学习这里就不一一列举
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 启动容器
docker start name
# 进入容器
docker attach name
# 停止容器
docker stop name
# 加载容器
docker load -i name
二、docker有什么用
我们手机上面有各种各样的app但是每个手机的系统大部分都是不一样的那么这些app如何适配这些不同的系统无疑是一个难题。而docker提供了一种轻量级、灵活、可移植的方式打包应用程序及其依赖项并创建一个独立隔离的运行环境这很好的解决了应用程序在每个不同环境的适配问题。 总的来说docker可以提供
快速构建和部署应用程序减少配置和依赖问题。简化多个环境之间的迁移和部署。提供隔离和安全性确保应用程序之间的互不干扰。可以水平扩展应用程序根据需要增加或减少容器的数量。
三、docker怎么用
制作一个docker镜像需要编写相应的dockerfiledockerfile的内容是由一系列指令构成的每个指令都会构建一个新的镜像层因为 Docker 的镜像是通过多个只读的文件系统层堆叠而成的。每个 Dockerfile 指令都会生成一个新的镜像层并在前一层的基础上进行修改。这样的设计使得 Docker 镜像具有可重复构建和高度可定制的特性。
FROM
一个docker镜像由很多层构成其中第一层就是基础镜像基础镜像是构建其他镜像的起点它提供了一个预装和配置好的操作系统和环境。
# 使用ubuntu20.04
FROM ubuntu:20.04# 使用ubuntu最新版
FROM ubuntu:latestMAINTAINER
指定维护者名称和联系信息用于标识镜像的作者。
MAINTAINER NAME Authors ContactInformationRUN
RUN命令用来在容器中执行命令用于安装软件包、运行脚本等。
# 安装软件包
RUN sudo apt install gcc gcc-c make cmake \mv -f test.txt /root # shell命令ENV
设置容器中的环境变量。
# 定义环境变量
ENV CPU_ARCHaarch64WORKDIR
设置工作目录。
# 设置工种目录为/root相当于cd /root
WORKDIR /rootCOPY、ADD
拷Dockerfile目录下的文件到镜像中。这里需要说明的是当我们是使用dockerfile制作镜像的时候能且仅能添加当前dockerfile所在目录下的文件到dockerfile中去同时在开始构建镜像的时候会计算当前目录下所有文件的大小。因此在构建docker镜像时最好将不必要的文件删除或者移出dockerfile的目录中。
COPY可以添加当前目录下的文件到镜像中。ADD除了拥有COPY的功能外还附加了一些功能。如自动解压被复制的压缩文件可以从远程URL中复制文件到镜像中。
# COPY 被复制的文件 存放路径
COPY TEST /root/# ADD 被复制的文件 存放路径
ADD TEST /root/USER
设置运行用户。
# 设置为root用户
USER rootEXPOSE
对外暴露容器端口。
# 如要使用shell可以暴露22号端口
EPXOSE 22实例
# 下面这段dockerfile是百度paddle中的一段开源的dockerfile
FROM ubuntu:18.04
MAINTAINER PaddlePaddle Authors paddle-devbaidu.comWORKDIR /workspaceENV PATH /opt/python3/bin:/root/.local/bin:$PATH
ENV LD_LIBRARY_PATH $LD_LIBRARY_PATH:/opt/python3/lib# Install Python
ADD https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.7.12.1-Linux-x86_64.sh miniconda3.sh
RUN /bin/bash miniconda3.sh -b -p /opt/python3/ \rm -f miniconda3.shRUN mkdir -p ~/.pip \echo [global] ~/.pip/pip.conf \echo trusted-host mirrors.aliyun.com ~/.pip/pip.conf \echo index-url https://mirrors.aliyun.com/pypi/simple ~/.pip/pip.confRUN echo channels: ~/.condarc \echo - conda-forge ~/.condarc \echo - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ ~/.condarc \echo - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ ~/.condarc \echo - defaults ~/.condarc \echo custom_channels: ~/.condarc \echo conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud ~/.condarc \echo msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud ~/.condarc \echo bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud ~/.condarc \echo menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud ~/.condarc \echo pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud ~/.condarc \echo simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud ~/.condarc \echo show_channel_urls: true ~/.condarc \echo channel_priority: strict ~/.condarc# Install R
RUN conda install -y r -c conda-forge# Install PaddlePaddle
RUN /opt/python3/bin/python -m pip install \https://paddle-wheel.bj.bcebos.com/0.0.0-cpu-mkl/paddlepaddle-0.0.0-cp37-cp37m-linux_x86_64.whl# Install reticulate, R interface to Python
RUN Rscript -e install.packages(reticulate, reposhttps://cran.rstudio.com)COPY example example
RUN cd example \curl -O https://paddle-inference-dist.cdn.bcebos.com/mobilenet-test-model-data.tar.gz \tar -zxvf mobilenet-test-model-data.tar.gz rm mobilenet-test-model-data.tar.gz
#
EXPOSE 22四、docker注意事项
docker容器中使用某些宿主机设备时需要额外的权限
docker容器并没有使用宿主机上某些设备的权限这需要我们在创建容器时配置一些参数允许容器使用宿主机上的设备。参数如下
docker run --privileged # 创建容器时加上参数docker容器中文件内容中文出现乱码
这是因为解码方式没有指定可以使用如下的操作修复中文解码
# dockerfile中添加以下内容
# Fix locales to en_US.UTF-8
RUN apt-get install -y locales
RUN localedef -i en_US -f UTF-8 en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8# 在有中文的文件中添加以下注释
# -*- coding: utf-8 -*-dockerfile使用不了软件源地址解析失败
可以通过在Docker守护进程配置文件中设置默认的DNS服务器来实现。请按照以下步骤进行操作 打开 Docker 守护进程的配置文件 /etc/docker/daemon.json如果该文件不存在可以创建一个新文件。
# 更改daemonjson
{dns: [8.8.8.8]
}docker容器ssh连接问题
docker容器想要通过ssh来连接不可以直接通过容器的ip地址我猜测因为容器ip地址只是宿主机给容器分配的一个ip地址这个地址属于宿主机的内网对外网是不可见的因此外网并不能ping通容器的ip地址而宿主机却可以。想要使用ssh连接容器必须将容器的22端口映射到宿主机的某个端口号上然后通过宿主机的ip地址和映射的端口连接。