LinuxZone

LinuxZone.net
Linux系统网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

Windows10下安装docker比较简单,有如下几种方式

2023年8月16日 243点热度

作者:josiahchen,腾讯TEG鲁班工作室后端工程师

序言

大多数人可能都碰到过这样一个问题,在本地开发好功能后,布署到服务器,或则其他人拉到本地接着开发时,会出现功能用不了的情况。

大多数时侯是因为系统不同,依赖出现差别而引致的。为此,为了解决这个问题,基于Docker建立统一开发环境的需求便形成了。

使用Docker的益处实现安装DockerLinux

我是用的是ArchLinuxlinux系统怎么样,所以以下安装方式是以ArchLinux为基础,其他发行版也长治小异,只是换成其包管理工具而已。

# 设置国内镜像站,国内提速用的,可选操作
$ sudo pacman-mirrors -i -c China -m rank
# 使用 Pacman 安装 Docker
$ sudo pacman -S docker
# 建立 docker 用户组。默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。
$ sudo groupadd docker
# 将当前用户加入 docker 组,退出当前终端并重新登录后生效
$ sudo usermod -aG docker $USER
# 测试是否安装成功
$ docker run --rm hello-world

Windows10

Windows10下安装docker比较简单,有如下几种形式:

自动下载安装

点击以下链接下载DockerDesktopforWindows。

下载好以后双击DockerDesktopInstaller.exe开始安装。

使用winget安装

$ winget install Docker.DockerDesktop

运行

在Windows搜索栏输入Docker点击DockerDesktop开始运行。

时台明手把手教直销_手把手教你构建自己的linux系统_linux最小系统构建

手把手教你构建自己的linux系统_时台明手把手教直销_linux最小系统构建

Docker启动以后会在Windows任务栏出现海豚图标。

等待片刻,当海豚图标静止时,说明Docker启动成功,然后你可以打开PowerShell/CMD/WindowsTerminal使用Docker。

macOS使用Homebrew安装

Homebrew的Cask早已支持DockerDesktopforMac,因而可以很便捷的使用HomebrewCask来进行安装:

$ brew install --cask docker

自动下载安装

假如须要自动下载,请点击以下链接下载DockerDesktopforMac。

请注意下载对应芯片类型的软件,M1和Intel芯片所对应的版本不通用。

就像macOS其它软件一样,安装也十分简单,双击下载的.dmg文件,之后将那只叫Moby的海豚图标拖放到Application文件夹即可(其间须要输入用户密码)。

手把手教你构建自己的linux系统_linux最小系统构建_时台明手把手教直销

运行

从应用中找到Docker图标并点击运行。

手把手教你构建自己的linux系统_linux最小系统构建_时台明手把手教直销

运行以后,会在右上角菜单栏见到多了一个海豚图标,这个图标表明了Docker的运行状态。

时台明手把手教直销_手把手教你构建自己的linux系统_linux最小系统构建

每次点击海豚图标会弹出操作菜单。

以后,你可以在终端通过命令检测安装后的Docker版本。

$ docker --version

Docker换源

docker默认的源是美国的,国外访问的话速率比较慢,因而可以换为国外源,提升镜像拉去速率。

Linux

Linux下的比较简单,创建个deamon.json文件写下配置就好:

$ vi /etc/docker/deamon.json
# 输入镜像源
{
  # 只换一个源也是可以的,可以直接用字符串,而不是数组。
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ],
}
# :wq 保存退出后重启 docker
$ systemctl restart docker

Windows和Mac

Windows和Mac都是使用的DockerDesktop,所以直接在GUI中配置即可。

时台明手把手教直销_手把手教你构建自己的linux系统_linux最小系统构建

打开Docker界面,点击DockerEngine

linux最小系统构建_手把手教你构建自己的linux系统_时台明手把手教直销

在左侧输出框中,输入镜像源:

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ],
}

输入后结果如下:

检验

在更新完镜像源且重启了docker以后,即可运行一下命令查看是否生效:

$ docker info
# Registry Mirrors:
#   https://registry.docker-cn.com/
#   http://hub-mirror.c.163.com/
#   https://docker.mirrors.ustc.edu.cn/

编撰Dockerfile

安装完Docker以后,接出来我们便可以来编撰我们自己的项目开发环境了。本文将以后端开发环境为例,建立Dockerfile。

包含环境:

# 前端开发中,时常需要使用 shell 命令,而有一个较为完整的环境比较重要,因此选择了使用 ubuntu 作为基础,若在意容器大小的话,可自行选择适用的基础镜像
FROM ubuntu
LABEL org.opencontainers.image.authors="moecasts.caster@gmail.com"
# 设置环境变量 
ENV DEBIAN_FRONTEND noninteractive
# 设置时区
ARG TZ=Asia/Shanghai
ENV TZ ${TZ}
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 用 root 用户操作
USER root
# 更换阿里云源,在国内可以加快速度
RUN sed -i "s/security.ubuntu.com/mirrors.aliyun.com/" /etc/apt/sources.list && 
    sed -i "s/archive.ubuntu.com/mirrors.aliyun.com/" /etc/apt/sources.list && 
    sed -i "s/security-cdn.ubuntu.com/mirrors.aliyun.com/" /etc/apt/sources.list
RUN  apt-get clean
# 更新源,安装相应工具
RUN apt-get update && apt-get install -y 
    zsh 
    vim 
    wget 
    curl 
    python 
    git-core
#  安装 zsh,以后进入容器中时,更加方便地使用 shell
RUN git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh && 
    cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc && 
    git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions && 
    git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting && 
    sed -i 's/^plugins=(/plugins=(zsh-autosuggestions zsh-syntax-highlighting z /' ~/.zshrc && 
    chsh -s /bin/zsh
# 创建 me 用户
RUN useradd --create-home --no-log-init --shell /bin/zsh -G sudo me && 
    adduser me sudo && 
    echo 'me:password' | chpasswd
# 为 me 安装 omz
USER me
RUN git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh && 
    cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc && 
    git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions && 
    git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting && 
    sed -i 's/^plugins=(/plugins=(zsh-autosuggestions zsh-syntax-highlighting z /' ~/.zshrc
# 安装 nvm 和 node
ENV NVM_DIR=/home/me/.nvm 
    NODE_VERSION=v14
RUN mkdir -p $NVM_DIR && 
    curl -o- https://gitee.com/mirrors/nvm/raw/master/install.sh | bash && 
    . $NVM_DIR/nvm.sh && 
    nvm install ${NODE_VERSION} && 
    nvm use ${NODE_VERSION} && 
    nvm alias ${NODE_VERSION} && 
    ln -s `npm bin --global` /home/me/.node-bin && 
    npm install --global nrm && 
    nrm use taobao && 
    echo '' >> ~/.zshrc && 
    echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc && 
    echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm' >> ~/.zshrc
# 安装 yarn
RUN curl -o- -L https://yarnpkg.com/install.sh | bash; 
    echo '' >> ~/.zshrc && 
    echo 'export PATH="$HOME/.yarn/bin:$PATH"' >> ~/.zshrc
# Add NVM binaries to root's .bashrc
USER root
RUN echo '' >> ~/.zshrc && 
    echo 'export NVM_DIR="/home/me/.nvm"' >> ~/.zshrc && 
    echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm' >> ~/.zshrc && 
    echo '' >> ~/.zshrc && 
    echo 'export YARN_DIR="/home/me/.yarn"' >> ~/.zshrc && 
    echo 'export PATH="$YARN_DIR/bin:$PATH"' >> ~/.zshrc
# Add PATH for node & YARN
ENV PATH $PATH:/home/me/.node-bin:/home/me/.yarn/bin
# 删除 apt/lists,可以减少最终镜像大小,详情见:https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#general-guidelines-and-recommendations
RUN rm -rf /var/lib/apt/lists/*
WORKDIR /var/www

编撰完Dockerfile后,建立即可:

docker build -t frontend/react:v1 .

建立完以后可以直接运行:

# 以 me 身份运行,推荐方式
docker run --user=me -it frontend/react:v1 /bin/zsh
# 以 root 角色运行
docker run -it frontend/react:v1 /bin/zsh

编撰docker-compose.yml

在开发时,我们寻常须要多个容器配合使用,例如须要配合mysql或其他容器使用时,使用docker-compose.yml可以更好的组织她们。

version: '2'
services:
  react:
    build:
      context: .
      dockerfile: react/Dockerfile
    tty: true
    ports:
      - 30000:3000
    volumes:
      - ./react/www:/var/www
    networks:
      - frontend
  mysql:
    image: mysql:5.7
    ports:
      - 33060:3306
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    environment:
      - MYSQL_ROOT_PASSWORD=password
    networks:
      - frontend
# 将容器置于同一 networks 即可直接通过容器名访问
networks:
  frontend:
    driver: bridge

启动容器

编撰完上述Dockerfile和docker-compose.yml后手把手教你构建自己的linux系统,即可愉快的开始开发了!

# 进入 docker-compose.yml 所在目录
$ cd frontend
# 后台启动 docker-compose.yml 中所有容器,若容器没有构建则会先构建
$ docker compose up -d
# 进入 react 容器中,以便命令行交互
$ docker compose exec --user=me react /bin/zsh

为了测试容器间是否能互相访问,可以使用编撰如下文件suse linux 下载,数据库需自行创建:

// index.js
const mysql = require('mysql')
const connection = mysql.createConnection({
  host: 'mysql',
  user: 'root',
  password: 'password',
  database: 'test',
})
connection.connect();
connection.query(`SELECT * FROM users`, function (error, results, fields) {
  if (error) throw error;
  console.log(results)
})
connection.end();

然后运行,即可看见结果:

$ node index.js
[ RowDataPacket { id: 1, name: 'Caster' } ]

总结

使用Docker来搭建开发环境非常便捷,一次搭建,即可在许多机器上多次使用,即便是要重装系统,也毋须在重复配置。

如不喜欢写Dockerfile的话,也可以直接开启一个容器,之后步入容器配置完后手把手教你构建自己的linux系统,使用dockersave/export导入即可。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: docker dockerfile docker命令
最后更新:2023年8月16日

Linux系统网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux系统网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
Windows和linux服务器的区别,你知道几个? gdb调试运行中的Python进程步骤 修改ssh默认端口号的方法及注意事项!服务器 企业应用程序的未来提供动力?——Linux服务器 Coredump:程序异常原因解析 Linux和Windows操作系统在服务器中的优势有哪些 设置开机自启动的方法和操作环境 Linux内核版本查看命令大全命令排查方法 Linux中可以使用xxd命令来查看二进制文件的内容和结构 mysql默认密码策略无法修改简单的密码必须要做 Linux开机自启动的常用方法来设置Linux系统启动命令 VisualStudio调试器的转储文件是怎样的?| 串口驱动框架分析之u-boot串口接收缓冲中的示例 常用命令/文件处理、基础功能介绍 不同操作系统发行的软件包可否混用? Linux系统如何添加开机启动自动启动的方式有很多种 ftp命令是标准的文件传输协议的用户接口,ftp Ubuntu16.04下完美切换Python版本(亲测) apt命令需要获得root,一般格式为sudoapt-getxxx! linux必装软件 Python、R、Jupyter等在内超过1500个数据科学包及其依赖项
什么是发行版(distro)的英文原文是什么?如何删除不要的应用软件?Linux安装源程序包CentOS上离线搭建SVN服务器的操作字符设备架构的大概原理、常用的数据结构和函数安装系统设计不合理,十招不需要顺序执行!5个最稳定的Linux发行版,你值得拥有!Linux内核体系体系结构简析图(上报)|维护者名单linux增加/根目录的磁盘空间(基于LVM)问题引出makemenuconfig和makeconfig内核的配置方式linux sdio wifi 驱动 STM3232ff1010概览为例对标准库开发进行LinuxCrontab日志的几种方式查看日志管理工具的作用构建定制化的Linux-3.5内核构建步骤及使用方法!单片机开发转入嵌入式开发的工程师是怎么做的MySQL数据库如何在Linux系统上面进行自动备份创建备份目录Linux内核裁剪——无模块支持(title-引导条)如何通过rar官方源码包正确安装unrar包编译安装解压命令2023年第一个符合OpenGLES3.1标准的GPU驱动程序(IPO)管理用户(user)的工具或命令;Linux基础知识:一个文件复制到当前文件夹如果系统没有自动检测到你的打印机,这篇文章教你
CentOS6开机启动的具体详情请参见理论篇!! Linux删除环境变量前面小节介绍了如何使用unset命令删除变量 利用dm-crypt来创建加密文件系统的方法-苏州安嘉 WannaRen病毒的可怕之处,它到底可怕在哪里? Linux系统运行级别linux启动.5-6安装方法 apt命令需要获得root,一般格式为sudoapt-getxxx! 服务器通电后,会直接进入BIOS,BIOS吗? MySQL查询DB2版本(详解如何查询MySQL中的DB2) 在Linux中运行USBGPS接收器的具体方法,你知道吗? 一集群和Linux上的集群解决方案集群系统(Cluster) 嵌入式计算机与通用计算机的区别与联系系统的特点 Linux发展背景(了解)企业应用现状 轻松管理Linux计划任务文件:创建、编辑、管理全攻略 Linux内核设备树的原理、结构、语法以及实际应用指南 零基础学习PHP,必备Linux常用命令! 虚拟机上安装的是centos6.5.10-66523 Linux下的仿真调试工具--Valgrind工具分析器 如何在Ubuntu上执行.bin和.run文件之前 学习的基础底层逻辑基础步骤开发内核驱动需要以下4个步骤 Linux整体架构与访问流程的整个架构
标签聚合
内核 目录 文件目录 linux服务器 软件 命令 文件 操作 应用 linux系统
书籍
课程
技术群
技术干货大合集↓
  • 2023年11月 / 86篇
  • 2023年10月 / 94篇
  • 2023年9月 / 90篇
  • 2023年8月 / 92篇
  • 2023年7月 / 96篇
  • 2023年6月 / 91篇
  • 2023年5月 / 93篇
  • 2023年4月 / 91篇
  • 2023年3月 / 69篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源 | Linux系统

COPYRIGHT © 2024 LinuxZone.net ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang