Docker基础功能教学

#Docker Install

  • 安装下载相关套件
    • sudo apt-get update
    • sudo apt-get install
      apt-transport-https
      ca-certificates
      curl
      gnupg-agent
      software-properties-common
  • 加入Docker GPG key
  • 加入Docker资料库
  • 安装Docker Engine
    • sudo apt-get update
    • sudo apt-get install docker-ce docker-ce-cli containerd.io
  • 测试Docker安装是否成功
    • sudo docker run hello-world
  • 安装特定版本Docker Engine
    • apt-cache madison docker-ce (列出版本资讯)
    • sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

#Docker Run [Option] 用法

  • Sudo docker run [Option] [Image] [Command] [Arg] (Ex : Sudo docker run --rm -d alpine sleep 10) (Ex : Sudo docker run -it alpine /bin/sh)
  • Option
    • -d 将Container跑在背景 (不会卡死terminal)
    • -e 设置环境参数
    • -i 保持STDIN开启
    • -t 开启pseudo-TTY (通常-it连用)
    • --name 给Container一个别名
    • --p 将Container中的Port对应到本机的Port
    • --rm 在Container停止後自动删除
    • -v 将Container内的资料夹与本机的资料夹做映射!

#Docker 基本指令

  • sudo docker ps –a : 列出目前产生的Container
  • sudo docker images : 列出目前有的Images档案
  • sudo docker rm [Container ID] : 删除特定Container!
  • sudo docker rmi [Images ID] : 删除特定映像档
  • sudo docker run [Images] : 建立Container
  • sudo docker exec [Container ID] : 传送指令给正在运行的Container
  • sudo docker inspect [Container ID] : 列出容易的相关设定参数
  • Sudo docker start [Container ID] : 重新启动Container
  • Sudo docker stop [Container ID] : 停止Container运行

#Docker Container特性

https://ithelp.ithome.com.tw/upload/images/20210705/20139199D1nHwsWlpp.jpg

#自制Docker Images

https://ithelp.ithome.com.tw/upload/images/20210705/20139199WqxJK86RmR.jpg

  • Dockerfile内容如下
FROM alpine:3.10.1

RUN apk update && apk upgrade && apk add --no-cache nano sudo wget curl \
tree elinks bash shadow procps util-linux coreutils binutils findutils grep && \
wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-x86_64 && \
chmod +x busybox-x86_64 && mv busybox-x86_64 bin/busybox1.28

CMD ["/bin/bash"]

#自制可由SSH连入的Docker Container

https://ithelp.ithome.com.tw/upload/images/20210705/201391997SZ6eSEDzP.jpg

  • Dockerfile内容如下
FROM alpine.base
RUN apk update && apk upgrade && apk add --no-cache openssh openrc && rc-update add sshd && \  
    # 设定 OpenSSH
    mkdir /run/openrc && touch /run/openrc/softlevel && rc-status &>/dev/null && \
    # 建立 sshup
    echo '#!/bin/bash' > /usr/bin/sshup && echo -e 'Welcome to Alpine 3.10.1\n' > /etc/motd && \ 
    echo '/etc/init.d/sshd start &>/dev/null && tail -f /dev/null' >> /usr/bin/sshup && chmod +x /usr/bin/sshup && \
    # 建立管理者帐号
adduser -s /bin/bash -h /home/user -G wheel -D user && echo '%wheel ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers && \
    echo -e "userd\nuser\n" | passwd user &>/dev/null && [ "$?" == "0" ] && echo “Add user ok!"

ENTRYPOINT ["/usr/bin/sshup"]

#Docker 桥接网路架构图

https://ithelp.ithome.com.tw/upload/images/20210705/201391994Lf9JBY8wz.jpg

#Docker 建立新的桥接器

https://ithelp.ithome.com.tw/upload/images/20210705/20139199vMFtNgYNLi.jpg

#Docker中共用资料夹

https://ithelp.ithome.com.tw/upload/images/20210705/20139199mEm0Ox8cCw.jpg

#Docker建立资料库测试

https://ithelp.ithome.com.tw/upload/images/20210705/20139199nksRnX09nE.jpg

#在Ubuntu运行C#

  • 注册Microsoft Key and Reposity
  • 下载安装dotnet-sdk
    • sudo add-apt-repository universe
    • sudo apt-get update
    • sudo apt-get install apt-transport-https
    • sudo apt-get update
    • sudo apt-get install dotnet-sdk-3.1
  • 测试
    • 查询可建立专案类型 : dotnet new --list
    • 建立新专案 : dotnet new [专案类型] –o [ProjectName] (EX : dotnet new console –o test )
    • 运行专案 : dotnet run [.csproj File] (EX : dotnet run ./test.csproj )

#在将C# Code包装为Docker Image

https://ithelp.ithome.com.tw/upload/images/20210705/20139199qyf8AKzzXu.jpg

  • Dockerfile内容如下
# https://hub.docker.com/_/microsoft-dotnet-core
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.csproj .
RUN dotnet restore

# copy and publish app and libraries
COPY . .
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/core/runtime:3.1
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "dotnet.dll"]

<<:  MITRE Engenuity ATT&CK Evaluations 测试报告

>>:  Day4 参加职训(机器学习与资料分析工程师培训班),记录学习内容(6/30-8/20)

Day3 Python 基础教学 (二)

前篇介绍完安装之後,我们这边要来介绍建立 python 的虚拟环境, virtualenv 是一个程...

Day 07 : MLOps 的挑战与技术要求

在 Day 06 引用与介绍 3 个 MLOps 相关定义,如果 MLOps 是一种工程文化与实践,...

# JS杂食-06--小实作之1

用HTML+纯JS试作一表单,规格: 两个输入框 一个提交按钮 点击按钮时显示:输入的两个数字总和 ...

文件后缀与Mime类型对照表

总觉得有用,先记录下。 以下是一些文件后缀(扩展名)对应的MIME类型的一个对照表,方便iis中或其...

110/10 - Intent.ACTION_MEDIA_SCANNER_SCAN_FILE弃用

新增相片後,要发送通知给相簿应用程序,这样才能更新照片清单,这样才能在相簿看到新增加的照片,使用者体...