ubuntu-server20.04LTS

使用 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 ports without publishing them to the host machine - they'll only
# be accessible to linked services. Only the internal port can be specified.
expose:
- "3000"
- "8000"
# Expose ports. Either specify both ports (HOST:CONTAINER), or just the
# container port (a random host port will be chosen).
#
# Note: When mapping ports in the HOST:CONTAINER format, you may experience
# erroneous results when using a container port lower than 60, because YAML
# will parse numbers in the format xx:yy as sexagesimal (base 60). For this
# reason, we recommend always explicitly specifying your port mappings as
# strings.
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
# Mount paths as volumes, optionally specifying a path on the host machine
# (HOST:CONTAINER), or an access mode (HOST:CONTAINER:ro).
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
# Mount all of the volumes from another service or container.
volumes_from:
- service_name
- container_name
# A single value, analogous to its docker run counterpart.
working_dir: /code