# docker **Repository Path**: lianqi_1/docker ## Basic Information - **Project Name**: docker - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-11 - **Last Updated**: 2024-04-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1. wsl 1\. 启用或关闭 windows 功能。 image-20240411214813210 2\. Microsoft Store 安装 Ubuntu。 3\. 管理员打开 PowerShell 或 cmd。 ```bash wsl --update ``` 4\. 继续重启电脑。 ```bash wsl -l -v wsl # 启动 ``` 5\. VSCode 安装 wsl 插件,链接 Ubuntu。 ```bash File -> Open Folder File -> Open Folder => /mnt/d/Work/ubuntu/ ``` # 2. Docker ## 安装 Docker windows 安装 https://docs.docker.com/desktop/install/windows-install/ ```bash docker pull nginx:latest docker run --name ng -dp 8080:80 nginx:latest ``` Ubuntu 安装 ```bash # https://docs.docker.com/desktop/install/ubuntu/ https://docs.docker.com/engine/install/ubuntu/ sudo docker ps # 查看状态 sudo -i sudu service docker start # 启动 docker docker ps # 查看状态 ``` ## 安装其他软件 https://docker.easydoc.net/ 镜像仓库:https://hub.docker.com/ 安装 redis ```bash # -d 后台运行 docker run -d -p 6379:6379 --name redis redis:latest ls redis-cli set name ifer get name ``` 安装 WordPress `docker-compose.yml` https://hub.docker.com/_/wordpress ```bash docker-compose up -d ``` # 3. 构建镜像 构建自己的镜像 ~ ```bash git clone https://github.com/gzyunke/test-docker.git ``` `dockerfile` ```yaml FROM node:11 MAINTAINER easydoc.net # 复制代码 ADD . /app # 设置容器启动后的默认运行目录 WORKDIR /app # 运行命令,安装依赖 # RUN 命令可以有多个,但是可以用 && 连接多个命令来减少层级。 # 例如 RUN npm install && cd /app && mkdir logs RUN npm install --registry=https://registry.npmmirror.com/ # CMD 指令只能一个,是容器启动后执行的命令,算是程序的入口。 # 如果还需要运行其他命令可以用 && 连接,也可以写成一个shell脚本去执行。 # 例如 CMD cd /app && ./start.sh CMD node app.js ``` ```bash docker build -t test:v1 . docker run -p 8080:8080 --name test-hello test:v1 ``` # 4. 目录挂载 容器里面的 8080 挂载到 9090 ```bash # 删除 test-hello 的容器 docker run -p 9090:8080 --name test-hello -v C:\Users\dangp\Desktop\test-docker:/app -d test:v1 ``` 修改 C:\Users\dangp\Desktop\test-docker 中的代码,进入 Docker test-hello 容器,找到 Exec,cat app.js 发现发生变化。 重启,刷新 localhost:9090,发生变化。 # 5. 容器通信 关闭 Redis / 删除 Redis 容器 ```bash docker network create test-net docker run -d --name redis --network test-net --network-alias redis redis:latest ``` test-docker/app.js ```js // ... const redis = require('redis'); let rds = redis.createClient({url: "redis://redis:6379"}); rds.on('connect', ()=> console.log('redis connect ok')) rds.connect(); // ... router.all('/redis', async ctx =>{ let count = await rds.incr("count") logger.info(`on test redis page, count ${count}`) ctx.body = `on test redis page, 44 count ${count} ` }); ``` ```bash docker run -p 8080:8080 --name test -v C:\Users\dangp\Desktop\test-docker:/app --network test-net -d test:v1 http://localhost:8080/redis # 进入到 Redis Exec redis-cli get count ``` # 6. Docker-Compose `docker-compose.yml` ```yaml version: "3.7" services: app: build: ./ ports: - 80:8080 volumes: - ./:/app environment: - TZ=Asia/Shanghai redis: image: redis:5.0.13 volumes: - redis:/data environment: - TZ=Asia/Shanghai volumes: redis: ``` ```bash docker-compose up -d ``` # 7. 发布部署 注册账号:https://hub.docker.com/ ```bash docker login -u iferdva docker tag test:v1 iferdva/test:v1 docker push iferdva/test:v1 docker run -dp 8888:8080 iferdva/test:v1 ``` docker-compose 中也可以使用这个镜像了 ```bash version: "3.7" services: app: # build: ./ image: iferdva/test:v1 ports: - 80:8080 volumes: - ./:/app environment: - TZ=Asia/Shanghai redis: image: redis:5.0.13 volumes: - redis:/data environment: - TZ=Asia/Shanghai volumes: redis: ``` # 8. 备份迁移 确认停止掉本机的 MongoDB ```bash docker run -p 27017:27017 --name mongo -v mongo-data:/data -d mongo:4.4 ``` 观测 docker desktop 中的 Images 和 Volumes,**使用 MongoDB Compass 插入一条数据**,Database: test,Collection: users ```bash # 备份 docker run --rm --volumes-from mongo -v C:\Users\dangp\Desktop\backup:/backup ubuntu tar cvf /backup/backup.tar /data/ ``` 删除 MongoDB 容器和 Valumes,重新跑,发现没有数据啦 ```bash docker run -p 27017:27017 --name mongo -v mongo-data:/data -d mongo:4.4 ``` 停止 mongo 容器 ```bash docker run --rm --volumes-from mongo -v C:\Users\dangp\Desktop\backup:/backup ubuntu bash -c "cd /data/ && tar xvf /backup/backup.tar --strip 1" ``` 启动 mongo 容器