使用 docker 配置服务
export the below variables in terminal
export http_proxy=’http://192.168.0.107:7890' export https_proxy=’https://192.168.0.107:7890' and use the following commands to disable proxy
unset http_proxy unset https_proxy
// 设置docker代理,在创建容器的时候自动配置进去 // C:\Users\Dev\.docker\config.json { "proxies": { "default": { "httpProxy": "http://192.168.0.107:7890", "httpsProxy": "http://192.168.0.107:7890", "noProxy": "*.xx.example.com,.xx2.com,127.0.0.0/8" } } }
sudo apt update -y // remove old version first sudo apt-get remove docker docker-engine docker.io containerd runc sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
// 避免每次 docker 命令都需要 sudo // 创建名为docker的组,如果之前已经有该组就会报错,可以忽略这个错误: // sudo groupadd docker // 将当前用户加入组docker sudo gpasswd -a ${USER} docker // 重启docker服务 sudo systemctl restart docker // 添加访问和执行权限 sudo chmod a+rw /var/run/docker.sock // install redis sudo docker pull redis sudo docker pull redis:alpine sudo docker run -p 6379:6379 --name kvm-redis -d redis // 终端访问 确认运行正常 sudo docker exec -it kvm-redis bash // ash for alpine version sudo docker exec -it kvm-redis ash redis-cli // Get a list of keys registered in redis keys * // 停止容器运行 sudo docker stop kvm-redis // 删除容器 sudo docker rm kvm-redis Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: TLS handshake timeout 网络慢,多试几次就可以了,或者添加一个国内的镜像源
docker pull mysql:5.7.39 // 默认配置运行 sudo docker run -p 3306:3306 --name kvm-mysql -e MYSQL_ROOT_PASSWORD=lanbe123 -d mysql:5.7 // 进入docker bash docker exec -it kvm-mysql bash // 找到配置文件路径 mysql --help | grep my.cnf mysql -u root -p // 查看 data 路径 /var/lib/mysql/ show variables like '%datadir%'; // 拷贝容器配置文件 sudo docker cp kvm-mysql:/etc/my.cnf . // windows docker run --name kvm-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=lanbe123 --mount type=bind,src=C:/Users/Dev/Documents/1/mysql/conf/my.cnf,dst=/etc/my.cnf --mount type=bind,src=C:/Users/Dev/Documents/1/mysql/data,dst=/var/lib/mysql --restart=on-failure:3 -d mysql:5.7.39 // 导入 sql docker cp monitor.sql kvm-mysql:/monitor.sql // 进入docker bash docker exec -it kvm-mysql bash mysql -uroot -planbe123 --default-character-set=utf8mb4 create database monitor character set utf8mb4; drop database monitor; // 导入 sql mysql -uroot -planbe123 -D monitor < monitor.sql //on-failure:3 是指容器在未来出现异常退出(退出码非0)的情况下循环重启3次 // 删掉容器重新开始 sudo docker stop kvm-mysql sudo docker start kvm-mysql sudo docker rm kvm-mysql // 重启容器 docker container restart kvm-mysql
asp.net core 部署 可以在项目创建完成以后在添加Dockerfile文件,在项目上右键,选择“添加”选项下面的“Docker支持” 然后选择Linux系统 docker build -t kvm-api-service . // 默认里面监听的是 80 端口 docker run --name=kvm-api -p 52000:80 -d kvm-api-service docker exec -it kvm-api bash
vue部署 // docker file FROM nginx:stable-alpine ADD ./dist /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] docker build -t kvm-front:vue2 . docker run --name kvm-front -p 52100:80 -v C:\Users\Dev\Documents\1\nginx\data\:/var/log/nginx -d kvm-front:vue2 docker exec -it kvm-front ash
nginx // 默认路径 conf /etc/nginx/nginx.conf html /usr/share/nginx/html log /var/log/nginx docker pull nginx:stable-alpine docker run --name nginx-proxy -p 8080:8080 -v C:\Users\Dev\Documents\1\nginx\conf\nginx.conf:/etc/nginx/nginx.conf -d nginx:stable-alpine docker exec -it kvm-proxy ash // 加入网络 --net=kvm-net // 检查配置文件 docker exec nginx-base nginx -t // 重新加载配置文件 docker exec nginx-base nginx -s reload
导出、导入镜像 // 导出容器 docker export kvm-api > kvm-api.tar // 导入容器 docker import - kvm-api-service < kvm-api.tar // 导出镜像 ID docker save [options] images [images...] docker save -o filename.tar <repo>:<tag> // 导出镜像 使用 repo:tag 如果只用 id 会导致 导入时没有 repo:tag 信息 docker save kvm-api-service:latest > kvm-api-image.tar // 同时多个镜像打包 docker save -o images.tar postgres:9.6 mongo:3.4 // 载入镜像 docker load < hangge_server.tar
docker compose docker compose 批量启动服务,可以理解为管理容器的批处理命令
// 开始构建镜像并启动服务 docker compose up // -d 以后台守护进程模式启动 -p 项目名称 网络名称也是这个 docker compose up -d -p kvmService // 停止运行中的容器 docker compose down // 开始运行容器 docker compose start // 重新构建容器 docker compose build docker compose ps // 网络信息 docker network ls
部分 compose.yaml 样例
expose: - "3000" - "8000" ports: - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001" volumes: - /var/lib/mysql - cache/:/tmp/cache - ~/configs:/etc/configs/:ro volumes_from: - service_name - container_name working_dir: /code