- Client(Docker客户端):是Docker的用户界面,可以接受用户命令(docker build,docker pull...)和配置标识,并与Docker daemon通信
- Images(Docker镜像):是一个只读模板,含创建Docker容器的说明,它与操作系统的安装光盘有点像
- Containers(容器):镜像的运行实例,镜像与容器的关系类比面向对象中的类和对象
- Registry:是一个集中存储与分发镜像的服务。最常用的Docker Registry是官方的Docker Hub
docker-ce与docker-io的区别?
Docker有两个主要版本:docker.io和docker-ce。Docker.io是早期版本的Docker,而docker-ce是Docker社区版(Community Edition)的缩写,是Docker的当前主要版本。
Docker.io与docker-ce之间的最大区别在于支持的平台和版本更新频率。Docker.io支持的平台相对较少,包括Ubuntu、Fedora、Debian等。此外,Docker.io的版本更新频率相对较低,可能会导致在某些情况下出现更新延迟的问题。
相比之下,docker-ce支持更广泛的平台,包括Windows、MacOS、CentOS、RHEL等,并且更新频率更高,包括每个月的安全更新和每季度的功能更新。此外,docker-ce还包括对Swarm等Docker工具的支持,并具有更丰富的社区支持和文档资料。
总之,docker-ce是当前主要版本的Docker,支持更广泛的平台和更高的版本更新频率,具有更多的功能和更丰富的社区支持。
Docker安装
ubuntu
docker.io安装
apt-get install -y docker.io
# 查看docker状态
systemctl status docker
# 如果没有启动,就手动启动
systemctl start docker
# 设置开机自启
systemctl enable docker
docker.ce安装
设置 Docker 的apt
存储库。
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc# Add the repository to Apt sources:
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
安装 Docker 软件包。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
CentOS7系统下安装Docker
yum -y install docker
启动docker后台服务:
service docker start
验证是否安装成功:
root@localhost hemi]# docker version
镜像加速
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。
新版的 Docker 使用 /etc/docker/daemon.json(Linux)
请在该配置文件中加入(没有该文件的话,请先建一个):
{"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
Docker常用命令
镜像常用命令
1)搜索镜像
可以在Docker Hub主页上搜索镜像,可以通过docker search命令搜索,如:
docker search [OPTIONS] TERM
OPTIONS说明:
- --automated : 只列出 automated build类型的镜像;
- --no-trunc : 显示完整的镜像描述;
- -s : 列出收藏数不小于指定值的镜像。
[root@localhost hemi]# docker search -s 20 tomcat
其中,
STARTS:镜像仓库收藏数
AUTOMATED:表示是否是自动构建的镜像仓库
2)下载镜像
docker pull [OPTIONS] NAME[:TAG]
OPTIONS说明:
- -a :拉取所有 tagged 镜像
- --disable-content-trust :忽略镜像的校验,默认开启
举个栗子
docker pull java #从Docker Hub中下载最新版本的Java镜像
docker pull reg.itmuch.com/java:8 #从指定Registry中下载标签为8的Java镜像
3)列出镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS说明:
- -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
- --digests :显示镜像的摘要信息
- -f :显示满足条件的镜像;
- --format :指定返回值的模板文件;
- --no-trunc :显示完整的镜像信息;
- -q :只显示镜像ID。
举个栗子:
列出本地镜像中REPOSITORY为ubuntu的镜像列表
[hemi@localhost ~]$ docker images ubuntu
4)删除本地镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]
OPTIONS说明:
- -f :强制删除;
- --no-prune :不移除该镜像的过程镜像,默认移除;
容器常用命令
1)新建并启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明(常用):
- -d: 后台运行容器,并返回容器ID;
- --name="nginx-lb": 为容器指定一个名称;
- -i:以交互模式运行容器,通常与 -t 同时使用;
- -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- -P: 随机端口映射;
- -p: 指定端口映射,有以下四种格式
- ip:hostPort:containerPort
- ip::containerPort
- hostPort:containerPort
- containerPort
- --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:<name|id> 四种类型;
如:
docker run --name mynginx -d nginx:latest
#使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。docker run -p 91:80 -v /data:/data -d nginx:latest
#使用镜像nginx:latest以后台模式启动一个容器,将容器的80端口映射到主机的91端口,主机的目录/data映射到容器的/data。
[hemi@localhost ~]$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/#
#使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
2)列出容器
docker ps [OPTIONS]
OPTIONS说明(常用):
- -a :显示所有的容器,包括未运行的。
- -f :根据条件过滤显示的内容。
- --format :指定返回值的模板文件。
- -l :显示最近创建的容器。
- -n :列出最近创建的n个容器。
- --no-trunc :不截断输出。
- -q :静默模式,只显示容器编号。
- -s :显示总的文件大小。
3)停止容器
docker stop CONTAINER_ID/CONTAIN_NAME
4)强制停止容器
docker kill CONTAINER_ID/CONTAIN_NAME
5)启动已停止容器
docker start CONTAINER_ID/CONTAIN_NAME
6)重启容器
docker restart CONTAINER_ID/CONTAIN_NAME
7)进入容器
docker exec -it CONTAINER_ID bash
如:
[hemi@localhost ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
219371844a81 7f94db72116e "tomcat.sh" 7 seconds ago Up 7 seconds 8009/tcp, 8080/tcp, 0.0.0.0:91->80/tcp zen_kalam
[hemi@localhost ~]$ docker exec -it 219371844a81 bash
bash-4.2$
8)删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明(常用):
- -f :通过SIGKILL信号强制删除一个运行中的容器
- -l :移除容器间的网络连接,而非容器本身
- -v :-v 删除与容器关联的卷
提交容器更改保存为新镜像
docker commit -m "change" 202df25a547a mycentos:v5
202df25a547a:容器id mycentos:v5 镜像名:标签
docker容器和宿主机之间复制文件
从主机复制到容器sudo docker cp host_path containerID:container_path
从容器复制到主机sudo docker cp containerID:container_path host_path
docker rm `docker ps -a -q` 删除所有容器
......
FROM tomcat
ENV CATALINA_HOME /usr/local/tomcat
.......
#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
......
查看日志:docker logs [OPTIONS] CONTAINER
OPTIONS说明:
-
-f : 跟踪日志输出
-
--since :显示某个开始时间的所有日志
-
-t : 显示时间戳
-
--tail :仅列出最新N条容器日志
docker logs --tail=10 f8cded9f66e5
docker logs -f f8cded9f66e5
镜像(image)保存到本地
docker save [镜像id]> /path/文件名.tar
例如:docker save 267ffb4c34c2> /home/kangkang/Desktop/dockertest/test.tar
镜像(image)加载到本地docker
把下载好的文件test.tar拷贝到需要加载镜像的电脑中
docker load < /path/文件名.tar
例:docker load < /home/kaka/test.tar
docker image ls 后发现镜像(image)名和版本都为空
用docker tag [镜像id] 镜像名:版本号
docker tag ab67ffb4c97c2 myimagesload:v1.0.1
运行 docker run ab67ffb4c97c2