环境安装-Ubuntu
1.卸载老版本,防止冲突
sudo apt-get remove docker docker-engine docker.io containerd runc
2.安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl gnupg software-properties-common
3.添加Docker GPG密钥
用于验证下载的Docker软件包是否在传输过程中被篡改;
key保存在/etc/docker/key.json中;
sudo curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
4.配置仓库源
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
5.安装docker engine
sudo apt update
sudo apt-get install docker-ce docker-ce-cli containerd.io
6.安装后校验
sudo docker run hello-world
命令执行
1.镜像操作
sudo docker images # 查询镜像
sudo docker pull 软件名:版本 # 拉取镜像
sudo docker rmi [image id] # 删除镜像前要停掉容器
2.容器操作
sudo docker run xxx # 运行xxx容器
sudo docker start 容器id # 启动容器
sudo docker restart 容器id # 重启容器
sudo docker stop 容器id # 停止当前正在运行的容器
sudo docker kill 容器id # 强制停止当前容器
sudo docker ps -a # 查询所有容器
sudo docker ps # 查看正在运行的容器
sudo docker rm e23dbee3f10d # 删除容器,建议先停止运行再删除
sudo docker rm `sudo docker ps -aq` # 删除所有容器,-q仅显示容器id
sudo docker exec -it baota /bin/bash # 进入到容器中
# 指定一些参数运行镜像
sudo docker run -itd --name redis-test -p 6380:6379 redis
-it 交互式进入;
-d: 后台运行容器,并返回容器ID;
--name:给容器指定一个名字;
-p:6380是本机端口,6379是容器内端口;
redis 是镜像名;
数据持久化
为了防止容器删除后数据丢失,建议运行镜像时,对容器的目录作本地映射。
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /宿主机路径:容器内路径 # 指定路径挂载
sudo docker run -v /home/test hello-world
sudo docker run -v {volume_name}:/home/test hello-world
# 以上这两种方式,都未指定本机路径,默认存储在/var/lib/docker/volumes/{volume_name}/_data
sudo docker run -itd --name hello -p 1010:1010 -v /home/test:/home/test hello-world /bin/bash
问题解决
问题:下载好docker后,执行docker run hello-world命令,总是报错:Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)?
解决方案:
/etc/docker/daemon.json 文件用于配置Docker守护进程的运行参数,可以在这个里面配置"registry-mirrors"字段,找了好多帖子,只有这个可用。
tips
docker容器并不是我们自己部署的,如何了解该容器信息呢?
sudo inspect [容器 id]
这个命令对于了解容器信息、服务映射路径有很大帮助~
Docker Compose 粗解
Compose 通过一个配置文件来管理多个Docker容器,适用于多个相互依赖的微服务部署。以下配置了一个java程序,依赖mysql服务的docker-compose.yaml;
version: '3.8' #表明该文件遵循 Docker Compose 规范的第 3 版,第 8 次更新。
services:
mysql-database: # 项目名
image: mysql:latest # 使用最新的mysql镜像
container_name: mysql_db # 指定容器名称
ports: # 相当于-p
- "3306:3306"
volumes: # 相当于-v
- ./data:/var/lib/mysql
healthcheck: # 用于检测服务是否健康运行
disable: true
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 60s
timeout: 20s
retries: 3
site-service:
image: openjdk:11-jdk
networks:
- frontend # ai-service加入到frontend网络
environment: # 定义环境变量,这里定义连接数据库的url、账号和密码
DATASOURCE_URL: jdbc:mysql://xxx
DATASOURCE_USERNAME: test
DATASOURCE_PASSWORD: 123456
command: nohup java -jar xxx.jar & # 会覆盖容器启动后默认执行的命令
restart: always # 容器退出时总是重启容器
depends_on: # 指定容器依赖
mysql-database:
condition: service_healthy
networks: # 创建网络
frontend:
backend:
sudo docker-compose up -d # 运行docker,-d后台执行
sudo docker-compose down # 先停止后删除容器、网络、卷、镜像
sudo docker-compose stop # 停止容器运行
sudo docker-compose logs # 查看日志
参考帖子
docker入门精髓
10分钟学会Docker的安装和使用
Docker-compose 简单介绍
docker-compose.yml文件配置详解
docker-compose教程
Docker使用docker-compose.yml文件