刚接触 Docker çš„æ—¶å€™ï¼Œä½ å¯èƒ½ä¼šè§‰å¾—它神秘åˆå¤æ‚。其实把它想象æˆä¸€ä¸ªæ‰“åŒ…å·¥å…·å°±å¥½ï¼ŒæŠŠä½ çš„åº”ç”¨å’Œå®ƒéœ€è¦çš„æ‰€æœ‰ä¸œè¥¿æ‰“包在一起,走到哪里都能è¿è¡Œã€‚
先从安装说起。在 Linux 系统上,一行命令就能装好 Docker。安装完æˆåŽï¼Œè¿è¡Œ docker run hello-world,看到欢迎信æ¯å°±è¯´æ˜Žä¸€åˆ‡æ£å¸¸ã€‚è¿™æ—¶å€™ä½ å·²ç»è·‘起了第一个容器。
å®¹å™¨çš„æ ¸å¿ƒæ˜¯é•œåƒã€‚é•œåƒæ˜¯åªè¯»çš„æ¨¡æ¿ï¼Œå®¹å™¨æ˜¯é•œåƒè¿è¡Œèµ·æ¥çš„å®žä¾‹ã€‚ä½ å¯ä»¥æŠŠé•œåƒç†è§£æˆå…‰ç›˜ï¼Œå®¹å™¨å°±æ˜¯å…‰ç›˜æ”¾è¿›å…‰é©±åŽè¿è¡Œèµ·æ¥çš„程åºã€‚è¦èŽ·å–镜åƒï¼Œç”¨ docker pull 命令,比如 docker pull nginx 会拉å–官方的 Nginx 镜åƒã€‚拉å–完æˆåŽï¼Œdocker images 能看到本地所有镜åƒã€‚
自己制作镜åƒéœ€è¦å†™ Dockerfile。这是一个简å•的文本文件,第一行写 FROM 指定基础镜åƒï¼Œæ¯”如 FROM node:18。接ç€ç”¨ WORKDIR 设置工作目录,COPY 把代ç å¤åˆ¶è¿›åŽ»ï¼ŒRUN æ‰§è¡Œå®‰è£…å‘½ä»¤ï¼Œæœ€åŽ EXPOSE 声明端å£ï¼ŒCMD 指定å¯åŠ¨å‘½ä»¤ã€‚å†™å¥½åŽï¼Œåœ¨ Dockerfile 所在目录è¿è¡Œ docker build -t myapp . 就能生æˆè‡ªå·±çš„镜åƒã€‚这里的 myapp æ˜¯ä½ ç»™é•œåƒèµ·çš„åå—,åŽé¢çš„点代表当å‰ç›®å½•。
镜åƒç®¡ç†æœ‰å‡ 个常用æ“作。docker rmi åˆ é™¤ä¸éœ€è¦çš„镜åƒï¼Œdocker tag ç»™é•œåƒæ‰“æ ‡ç¾æ–¹ä¾¿ç‰ˆæœ¬ç®¡ç†ï¼Œdocker push æŠŠé•œåƒæŽ¨åˆ°ä»“åº“è®©åˆ«äººä¹Ÿèƒ½æ‹‰å–。记得推é€å‰è¦å…ˆ docker login 登录仓库。
容器è¿è¡Œèµ·æ¥åŽï¼Œdocker ps 查看æ£åœ¨è¿è¡Œçš„容器,docker stop åœæ¢å®¹å™¨ï¼Œdocker rm åˆ é™¤å®¹å™¨ã€‚å¦‚æžœæƒ³è¿›å…¥å®¹å™¨å†…éƒ¨è°ƒè¯•ï¼Œdocker exec -it 容器 ID bash 就能进去。容器里的日志用 docker logs 查看,排错时éžå¸¸æœ‰ç”¨ã€‚
实际部署时,推è用 docker-compose。写一个 docker-compose.yml 文件,å¯ä»¥å®šä¹‰å¤šä¸ªå®¹å™¨æ€Žä¹ˆä¸€èµ·è¿è¡Œã€‚比如 Web åº”ç”¨åŠ æ•°æ®åº“,一个文件就能说清楚它们的关系。è¿è¡Œ docker-compose up -d åŽå°å¯åŠ¨æ‰€æœ‰æœåŠ¡ï¼Œdocker-compose down ä¸€é”®åœæ¢æ¸…ç†ã€‚
æ•°æ®æŒä¹…化是个é‡ç‚¹ã€‚å®¹å™¨åˆ äº†æ•°æ®å°±æ²¡äº†ï¼Œæ‰€ä»¥è¦ç”¨å·ã€‚创建å·ç”¨ docker volume create,è¿è¡Œæ—¶ç”¨ -v 傿•°æŒ‚è½½åˆ°å®¹å™¨é‡Œã€‚è¿™æ ·å³ä½¿å®¹å™¨é‡å»ºï¼Œæ•°æ®ä¾ç„¶å®‰å…¨ã€‚
网络方é¢ï¼ŒDocker 默认给æ¯ä¸ªå®¹å™¨åˆ†é… IP。如果想让容器之间能互相访问,创建自定义网络,å¯åŠ¨å®¹å™¨æ—¶æŒ‡å®š –network 傿•°ã€‚需è¦å¯¹å¤–æœåŠ¡çš„ï¼Œç”¨ -p æ˜ å°„ç«¯å£ï¼Œæ¯”如 -p 8080:80 把容器的 80 ç«¯å£æ˜ 射到宿主机的 8080。
最åŽè¯´ä¸ªå°æŠ€å·§ï¼Œå®šæœŸç”¨ docker system prune 清ç†ä¸ç”¨çš„东西,释放ç£ç›˜ç©ºé—´ã€‚生产环境建议固定镜åƒç‰ˆæœ¬ï¼Œåˆ«ç”¨ latest æ ‡ç¾ï¼Œé¿å…更新导致æ„外。
Docker 就这么简å•ã€‚å¤šåŠ¨æ‰‹è¯•å‡ æ¬¡ï¼Œä½ å¾ˆå¿«å°±èƒ½ç†Ÿç»ƒã€‚çŽ°åœ¨æŠŠä½ çš„åº”ç”¨æ‰“åŒ…æˆé•œåƒï¼Œè®©å®ƒéšæ—¶éšåœ°éƒ½èƒ½è·‘èµ·æ¥ã€‚
