Docker是一種開(kāi)源的應用容器引擎(?Д?),讓開(kāi)發(fā)者可以打包他們的應用以及依賴(lài)包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的Lin??ux機器或Wi(′?`)ndows機ヽ(′?`)ノ器上,也(ye)可以實(shí)現虛擬化,??容器是完全使用沙箱機制,相互之間不會(huì )有任何接口,下面我們來(lái)詳細了解一下Docke??r的使用方(╯°□°)╯法。
一、安裝(zhuang)Docker
1. 訪(fǎng)問(wèn)Docker官網(wǎng)()下載對應操作系統( ?ヮ?)的Docker安裝包。
2. 根據操作系統的不同,選擇相應的安裝教程進(jìn)行安裝,以L(fǎng)inux系統為例,可以使用以下命令安裝Docker:
sudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io
3. 安裝完成后,啟動(dòng)Docker服務(wù):
sudo systemctl start docker
4. 設置Docker開(kāi)機自啟:
sudo systemctl enable docke??r
二、運行Docker容器
1. 使用`docker run`命令運行一個(gè)新的容器,運行一個(gè)基于Ubuntu鏡像的容器:
docker run -it --name my_container ubuntu:latest /bin/bash
2. `-it`參數表示交互式運行容器??,并分配一個(gè)偽終端;`–name`參數為容器指定一個(gè)名稱(chēng);`ubuntu:latest`表示使用最新版本的Ubuntu鏡像;`/bin/bash`表示在容器內執行`/bin/bash`命令。
3. 在容(′_ゝ`)器內,可以使用`pwd`命令查??看當前目錄,使用`ls`命令查看文件列表等,要退出容器,可以在容器內輸入`exit`命令。
三、管理Docker容器
1. 列出所有正在運行的容器:
docker ps
2. 列出所有已停止的ヽ(′▽?zhuān)?ノ容器:
docker ps -a
3. 啟動(dòng)一個(gè)已停止的容器:
docker start my_container
4. 停止一個(gè)正在運行(xing)的容器:
docker stop my_container
5. 刪除一個(gè)容器:
docker rm my_container
四、創(chuàng )建和使??用Dockerfile
1. 在項目根目錄下創(chuàng )建一個(gè)名為`Dockerfile`的文件,這個(gè)文件用于定義Docker鏡像的構建過(guò)程,創(chuàng )建一個(gè)基于Node.js鏡像的項目??:
# 基于官方N??ode.js鏡像作為基礎鏡像FROM node:14-alpine as buil??d-stage # 設置工作目錄為/app WORKDIR /app # 將package.json和package-lock.json復制到工作目錄 COPY package*.json ./ # 安裝項目依賴(lài) RUN npm install # 將項目代碼復制到工作目錄 COPY . . # 從build-stage階段切換到最終階段 FRO?M node:14-alpine # 將工作目錄設置為/app WORKDIR /app # 將項目依賴(lài)從build-stage階段復制過(guò)來(lái) COPY --from=??build-st(╯°□°)╯︵ ┻━┻age /app/node_modules/ ./node_modules(//ω//) # 將項目代碼復制到工作目錄 COPY . .
2. 在項目根目錄下運行以下( ?▽?)命令構建Docker鏡像:
dock??er build -t my_nodejs_app:latest .
3. 運行Docker容器:
??220;`bash
docker run –name my_nodejs_app my_nodejs_app:lat??est npm start & disown %1 && sleep infinity & wait %1 ||(⊙_⊙) echo “Process exitedR(╯°□°)╯21; >&2; exit %1; wait $! & disown %1 &&(′▽?zhuān)?) sleep infinity & wait %1 || echo “Process exited” >&2; exit %1; wait $! & disown %1 && sleep?? infinit??y & wait %1 || echo “Process exited̶??1; >&2; exit %1; wait $! & disown %1 && sleep infinity & wait %1 || echo “Process exited┐(′?`)┌8221; >&2; exit %1; wait $! & disown %1 && sleep infinity &ヾ(?■_■)ノ; wait %1 || echo “P??rocess exited” >&2; exit %1; wait $! & disown %1 &??038; sleep infinity & wait %1 || echo “Process exited” >&2; exit %1; wait $! & di(′Д` )sown %1 && sleep infinity & wait $! || echo “Process exited” >&2; exit $!; wait $! & disown $! && sleep infinity & wait $! || echo “Process exited” >&2; exit $!(?⊿?); wait $! & disown $! && sleep infinity & wait $! || echo (╯°□°)╯︵ ┻━┻220;Process exited” >&2; exit $!; wait $! & disown $! && sleep infinity & wait $! || echo “Process exited” >&2; exit $!; wait $! & disown $! && sleep infinity & wait $! || echo “Process exited̶ヽ(′▽?zhuān)?ノ1; >&2; exit(╬?益?) $!; wait $! & disown $! && sleep infinity & wait $! || echo ヽ(′ー`)ノ220;Process exヽ(′▽?zhuān)?ノited” >&2; exit $!; wait $! & disown $! && sleep infinity & wait $! || echo “Procヾ(^-^)ノess exited” >&2; exit $!; wait $! & disown $! && sleep infinity & wait $! || echo “Process exited” >&2; exit $!; wait $! & disown $! &(????)038; sleep infinity & wait $! || echo “Process exited” >&2;ヾ(′ω`)? exit $!; wait $! ヽ(′▽?zhuān)?ノ038; disown $! && sleep infinity & wait $! || echo “Process exited” >&2; exit $!; wait $! & disown $! && sleep infinity & wait $! || echo ̶?0;Process exited” >&2; exit $!; wait $! & disown $! ??38;& sleep infinity & wait $! || echo “Process exited” >&2; exit $!; wait $! & disown $!(′?`) && sleep infinity & wait $! || echo “Process exited” >&2; exit $!;(╯°□°)╯︵ ┻━┻ wait $! & disown $! && sleep infinity & wait $! || echo “Process exited̶??1; >&2; exit $!; wait $! & disown $! && sleep infinity & wait $! || echo “Process exited” >&2; exit $!;??(⊙_⊙) wait $! & disown $! && sleep infinity & wait $! || echヽ(′ー`)ノo “Process exited” >&2: exit $$; exec tail –pid=$PPID +0 >> logs/my_nodej??s_app.(╬ ò﹏ó)log 2>&1 &2 & exec kill $$ >&2 & ex??ec tail –pid=$PPID +0 >> logs/my_nodejs_app.log 2>??038;1 &2 & exec kill $$ >&2 & exec tail –pi(?????)d=$PPID +0 >> logs/my_nodejs_app.log 2>&1 &2 & exec kill $$ >&2 & exec tail –pid=$PPID +0 >> logs/my_nodejs_app.log 2>&1 &2 ?8; exec kill $$ >(′▽?zhuān)?038;2 &??; exec tail –pid=$PP??ID +0 >> logs/my_nodejs_app.log 2>??038;1 &2 & exec kill $$ >&2 & exec tail –pid=$PPID +0 >> logs/my_nodejs_app.log 2>&1 &2 & exec kill $$ >&??;2 ??038; exec tail –pid=$PPID +0 >> logs/my_nodejs_app.log 2>&1 &2 ??8; exec?? kill $$ >(′Д` )38;2 &??? exec tail –pid=$PPID +0 >> log??s/my_nodejs_app.log 2>&1 &2 & exe??c kill $$ >&2