安装 🔗
Ubuntu安装Docker 🔗
安装一些必要的系统工具 🔗
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
安装GPG证书 🔗
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
写入软件源信息 🔗
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
更新并安装docker-CE 🔗
sudo apt-get -y update
sudo apt-get -y install docker-ce
启动Docker 🔗
systemctl enable docker
systemctl start docker
问题 🔗
启动docker,运行命令遇到问题 dial unix /var/run/docker.sock: permission denied.Are you trying to connect to a TLS-enabled
创建docker用户组 🔗
sudo groupadd docker
把当前用户加入docker用户组 🔗
sudo gpasswd -a ${USER} docker
更新用户组 🔗
newgrp docker
查看是否添加成功 🔗
cat /etc/group | grep ^docker
重启docker 🔗
sudo service docker restart
镜像 🔗
使用阿里云镜像加速 🔗
sudo vim /etc/docker/daemon.json
添加:
{
"registry-mirrors": ["https://xs4sxa1w.mirror.aliyuncs.com"]
}
保存退出
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker生成镜像 🔗
1. 创建名称为 zhang/order 的镜像
2. 版本(Tag)为 v0.1
docker build -t zhang/order:v0.1 .
Docker查看镜像 🔗
docker images
Docker删除镜像 🔗
1.删除镜像ID为 123456 的镜像
docker rmi 123456
2.删除无用镜像
docker rmi $(docker images -f "dangling=true" -q)
3.删除虚悬镜像
docker image prune
3.根据条件批量删除
// 删除带有 xxxy 的 镜像
docker rmi $(docker images | grep "xxxy" | awk '{print $3}')
容器 🔗
创建容器 🔗
1. -d 后台运行
2. -p 8080:8080 端口映射,前面的8080宿主机的端口,后面的8080容器里面的端口
3. --network mynet 运行在mynet的网络上
4. --name 容器名称
5. zhang/order:v0.1 镜像名称加Tag
docker run -d -p 8080:8080 --network mynet --name api zhang/order:v0.1
查看容器 🔗
1. 查看运行中的容器
docker ps
2. 查看全部容器
docker ps -a
3. 进入容器查看信息(xxxx容器名称或容器ID)
docker exec -it xxxx /bin/bash
docker exec -it xxxx /bin/sh
4. 查看容器日志
docker logs xxxx
5. 一直打印日志
docker logs --follow
6. 停止容器
docker stop xxxx
7. 重启容器
docker restart xxxx
删除容器 🔗
1. 删除停止的容器(api容器名称)
docker rm api
2. 删除运行中的容器(api容器名称)
docker rm -f api
3. 删除全部容器
docker rm $(docker ps -aq)
自动重启容器 🔗
1.对刚开始创建的容器
--restart=always 在容器退出时总是重启
--restart=on-failure 在容器非正常退出(代码不等于0)时重启
--restart=on-failure:10 在容器非正常退出(代码不等于0)时重启10次
docker run -d \
-p 8080:8080 \
--network mynet \
--restart=always \
--name api \
zhang/order:v0.1
2.对已经运行的容器(api=容器名称)
docker update --restart=on-failure:10 api
3.查看容器启动次数
docker inspect -f "{{ .RestartCount }}" api
3.查看容器最后一次启动时间
docker inspect -f "{{ .State.StartedAt }}" api
网络 🔗
创建网络 🔗
docker network create baoli-networks
查看网络 🔗
1. 查看一个网络
docker network inspect mynet
2. 查看容器的网络
docker inspect ordering
连接网络 🔗
docker network connect mynet ordering
数据 🔗
拷贝数据 🔗
1. 从容器拷贝到宿主机
docker cp [容器Id]:/[dockerfile最后目录] e:/web/test
2. 从宿主机拷贝到容器
docker cp /home/www [容器Id]:/[dockerfile最后目录]
数据挂载 🔗
注意:官方的建议是挂载文件夹,而不是文件。如果确实需要挂载文件,宿主机提前创建好文件
1. -v /home/www/prod_order_api/log:/app/log 文件夹挂载
2. -v /home/www/prod_order_api/app.yaml:/app/app.yaml 文件挂载,需要在对应宿主机创建文件
2. -v /home/www/prod_order_api/ip2region.db:/app/ip2region.db 文件挂载,需要在对应宿主机创建文件
docker run -d -p 50000:50000 -v /home/www/prod_order_api/log:/app/log -v /home/www/prod_order_api/app.yaml:/app/app.yaml -v /home/www/prod_order_api/ip2region.db:/app/ip2region.db --name orderAPI baoli/order:v0.1
自定义镜像 🔗
中国时区的alpine镜像 🔗
FROM alpine:3.16
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk update --no-cache \
&& apk add --no-cache ca-certificates tzdata curl
ENV TZ=Asia/Shanghai
CMD ["/bin/bash"]
2. 构建镜像
docker build -t zc1185230223/alpine:3.16.1 .
--3. tag
docker tag alpine-hk zc1185230223/alpine:3.16.1
4. 推送镜像
docker push zc1185230223/alpine:3.16.1
Dockerfile 🔗
GO应用程序Dockerfile 🔗
分阶段构建镜像 🔗
# Build Stage
FROM golang:1.16-alpine AS builder
ENV GO111MODULE=on \
GOPROXY=https://goproxy.cn,direct
WORKDIR /app
COPY . .
RUN go build -o main main.go
# Run Stage
# FROM alpine
# 使用自定义的alpine,香港时区
FROM zc1185230223/alpine-hk
WORKDIR /app
COPY --from=builder /app/main .
COPY --from=builder /app/app.yaml .
COPY --from=builder /app/ip2region.db .
EXPOSE 50000
CMD ["/app/main"]
直接使用编译好的程序 🔗
# 使用scratch(这个基础镜像会进入不了容器,最好用使用自定义的alpine [zc1185230223/alpine-hk])
# 构建镜像前,需要编译程序
# CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o go-doc-api .
FROM scratch
WORKDIR /app
COPY . /app
EXPOSE 9201
ENTRYPOINT ["./go-doc-api"]
ASP.NET CORE Dockerfile 🔗
Docker安装MYSQL服务 🔗
下载Mysql 🔗
docker pull mysql
目录创建 🔗
在主目录(和home同目录) 创建/mysql/conf /mysql/logs /mysql/data 3个文件夹
mkdir -p ~/mysql/conf ~/mysql/logs ~/mysql/data
在conf中创建文件 my.cnf 并写入[注意:每行后面不要有空格] 🔗
cd mysql/conf
sudo vim my.cnf
[mysqld]
user=mysql
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
使用已有网络或者创建一个新的或者不用(可以省略) 🔗
docker network create mynet
运行mysql镜像 🔗
终端进入刚刚创建的mysql文件夹(如果有创建网络)
docker run -d -p 3306:3306 \
-e MYSQL_USER='hulk' \
-e MYSQL_PASSWORD='pwd123' \
-e MYSQL_ROOT_PASSWORD='root' \
-e MYSQL_ROOT_HOST=% \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
--network mynet \
--name betamysql mysql
进入mysql容器 🔗
初始密码为:root
docker exec -it betamysql bash
mysql -uroot -p # 回车后输入数据库密码
查看用户信息 🔗
备注:host为 % 表示不限制ip localhost表示本机使用 plugin非mysql_native_password 则需要修改密码
select host,user,plugin,authentication_string from mysql.user;
修改用户密码 🔗
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'hulk'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd123456';
对用户授权(全部授权) 🔗
# 查看权限
show grants for hulk;
grant all on *.* to 'hulk'@'%';
flush privileges;
Docker-componse安装 🔗
安装 docker-compose 🔗
在线 🔗
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
离线 🔗
下载离线包(linux 64位) GitHub下载
将下载的compose文件 “docker-compose-Linux-x86_64“ 改名为 “docker-compose”,移动到 /usr/local/bin
sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
删除 docker-compose 🔗
sudo rm /usr/local/bin/docker-compose
// 上面的不行,就执行下面的
sudo ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
生成镜像 🔗
docker-compose build
运行 🔗
docker-compose up
#后台运行
docker-compose up -d
停止 🔗
docker-compose down
#-v:删除挂载卷和volunme的链接
docker-compose down -v
容器扩容 🔗
# user_rpc: docker-compse 服务
# 5 扩容个数
# 注意:扩容的服务不能定义容器名称
docker-compose up -d --scale user_rpc=5
Docker推送镜像到腾讯云 🔗
登录腾讯云镜像是需要安装软件 🔗
https://blog.51cto.com/u_14832233/4057916
sudo apt install gnupg2 pass
gpg2 --full-generate-key
登录腾讯hub 🔗
sudo docker login --username=zc1185230223 hub.tencentyun.com
docker login --username=37149283 ccr.ccs.tencentyun.com
System159753!#
给镜像打Tag 🔗
sudo docker tag 镜像Id hub.tencentyun.com/zc1185230223/自定义镜像名称:tag
docker tag 镜像Id ccr.ccs.tencentyun.com/cn.btx/xxx:tag
推送 🔗
sudo docker push hub.tencentyun.com/zc1185230223/自定义镜像名称:tag
获取镜像 🔗
服务器pull镜像时,登录失败
Error saving credentials: error storing credentials - err: exit status 1, out: `Cannot autolaunch D-Bus without X11 $DISPLAY`
执行下面的命令
sudo apt install gnupg2 pass
Docker安装POSTGRES服务 🔗
docker run --name postgres16 \
--network proxy \
-p 10924:5432 \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=zc920328 \
-v /home/kenneth/services/postgres/data:/var/lib/postgresql/data \
-d postgres:16-alpine