DOCKER入门
DOCKER入门
安装docker
1、安装前先卸载之前装的docker,没有安装过跳过,卸载旧版本
[root@localhost ~] yum remove docker \
docker-client
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-1ogrotate \
docker-engine
2、安装工具包
[root@localhost ~] yum install -y yum-utils
3、设置镜像仓库(阿里云)
[root@localhost ~] yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.1 更新yum软件包索引
[root@localhost ~]# yum makecache fast
3.2 安装docker相关服务
[root@localhost ~]# yum install docker-ce docker-ce-cli containerd.io
4、启动docker
[root@localhost ~]# systemctl start docker
5、使用docker version 检测是否安装成功
[root@localhost ~]# docker version
Client: Docker Engine - Community
Version: 26.1.4
API version: 1.45
Go version: go1.21.11
Git commit: 5650f9b
Built: Wed Jun 5 11:32:04 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 26.1.4
API version: 1.45 (minimum version 1.24)
Go version: go1.21.11
Git commit: de5c9cf
Built: Wed Jun 5 11:31:02 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.33
GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0
查看安装的镜像
[root@localhost ~]# docker images
卸载docker
1、卸载依赖
[root@localhost ~]# yum remove docker-ce docker-ce-cli containerd.io
2、删除资源
[root@localhost ~]# rm -rf /var/lib/docker
/var/lib/docker docker的默认工作路径
帮助命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令
镜像命令
查看所有本地的主机上的镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rabbitmq 3.13-management b188af0de93c 6 months ago 251MB
mysql 5.7 5107333e08a8 9 months ago 501MB
解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
可选项
-a,--all 列出所有对象
-q,--quiet 只显示镜像的id
常用命令
搜索镜像
docker search 镜像名
可选项:-- filter=stars=3000 筛选星级大于等于3千的
下载镜像
docker pull 镜像名:版本
eg:docker pull mysql:5.7
不输入版本默认最新。
删除镜像
docker rmi 容器id
-f 强制,多个时空格间隔
批量删除:docker rmi docker images -aq
保存导出镜像
docker save mysql > /tmp/test/mysql.tgz
先在容器内安装我们需要的软件后,提交该镜像,导出镜像为压缩文件,可以发给别人使用了
保存以下镜像到指定文件夹
查看镜像详细信息
docker info
docker image inspect 镜像id
docker image inspect 镜像id前几位
修改镜像名称
docker tag 镜像id 名称
容器命令
新建容器并启动,不存在回去下载
docker run [可选参数] image
--name = "Name" 容器名称 mysql1,mysql2
-d 后台运行
-it 使用交互方式运行,进入容器查看内容
-p 指定端口映射,主机端口:容器端口 -p 80:80
退出容器
exit #退出并停止
Ctrl + P + Q #不停止退出
列出所有容器
docker ps [可选参数]
-a 列出当前正在运行的容器+带出历史运行过的容器
-n=?显示最近创建的容器
删除容器
docker rm 容器id
docker rm -f $(docker ps -aq) # 删除所有的容器
docker ps -a -q|xargs docker rm # 删除所有的容器
-f 强制删除
启动和停止
docker start 容器id 启动
docker restart 容器id 重启
docker stop 容器id 停止
docker kill 容器id 强制停止
查看容器端口
docker port 容器名称
提交容器
docker commit 容器id 新的镜像名称
先提交保存新的镜像然后通过docker save 去导出到文件夹
日志
docker logs -f-t --tail 容器id
查看镜像的元数据
docker inspect 容器id
查看容器详细信息
docker container inspect 容器id
进入当前正在运行容器
方式一:docker exec -it 容器id bashShe11 进入容器后开启一个新的终端,可以在里面操作(常用)
方式二: docker attach 容器id 进入容器正在执行的终端,不会启动新的进程!
进入容器,修改一些配置
多容器通信
要想多容器之间互通,从项目容器访问 Redis 容器,需要把他们放到同个网络中。通过创建虚拟网络并在运行时把他们放到一个虚拟网络下即可。
创建一个名为test
的网络:
docker network create test
运行 Redis 在 test
网络中,别名redis
docker run -d --name redis --network test-net --network-alias redis redis:5.0
docker network ls
查看网络列表
Dockerfile
自定义镜像就需要创建一个Dockerfile文件定义镜像,然后执行构建命令。
from: 指定当前自定义镜像依赖的环境,指定基础镜像
copy: copy指令从宿主机复制文件/目录到新的一层镜像内.COPY指令能够保留源文件的元数据,如权限,访问时间等等
add: 复制文件会自动解压,复制主机文件到容器内
workdir: 声明镜像的默认工作目录
run: 执行的命令,可以编写多个,也就是你想它干啥
cmd: 需要执行的命令(在workdir下执行的,cmd可以写多个,只以最后一个为准)
volume:设置卷,挂载主机目录,将容器产生的数据存到主机上
ENV:设置环境变量
expose:指定容器运行时对外提供的端口服务
CMD:在指定了entrypoint指令后,用CMD指定具体的参数
docker不是虚拟机,容器就是一个进程,既然是进程,那么程序在启动的时候需要指定些运行参数,这就是CMD指令作用
例如centos镜像默认的CMD是/bin/bash,直接docker run-it centos会直接进入bash解释器也可以启动容器时候,指定参数,docker run it centos cat /etc/os-releasea
CMD运行shell命令,也会被转化为shell形式
ENV:
例如:
在dockerfile中
ENV NAME="张三"
ENV age="18"
# 后续的操作通过$NAME就可以访问张三
例如:运行个jar包
# 使用官方的OpenJDK镜像作为基础镜像
FROM openjdk:8-jdk-alpine
# 设置工作目录
WORKDIR /app
# 复制构建好的JAR包到容器中
COPY target/app-1.0-SNAPSHOT.jar /app/app.jar
# 暴露端口
EXPOSE 8080
# 运行应用
CMD ["java", "-jar", "app.jar"]
编写完Dockerfile后需要通过命令将其制作为镜像,并且要在Dockerfile的当前目录下,之后即可在镜像中查看到指定的镜像信息,注意最后的 .
docker build -t 镜像名称[:tag] .
1、构建:docker build -t my-java-app
2、运行容器:docker run -p 8080:8080 -d my-java-app
Docker-Compose
使用 docker-compose 可以把项目的多个服务集合到一起,一键运行。
linux版本安装
1、校验是否已经安装
docker compose version
2、没有安装的话,
sudo yum update
sudo yum install docker-compose-plugin
要把项目依赖的多个服务集合到一起,我们需要编写一个docker-compose.yml
文件,描述依赖哪些服务