01、docker基础指令

docker的安转可以采用yum和二进制方式安装,在此不再赘述

docker镜像和容器

系统的安装盘就叫镜像,常见的Ghost技术做的GHO系统镜像和Docker镜像非常像。

Docker镜像是分层的

Docker镜像拉取下来,可以直接运行,运行后的东西就叫做容器,一个镜像可以启动很多容器。

容器就是镜像启动后的状态,在Linux系统中就是一个进程,但容器是可以进入的,就像进入了一个虚拟机里

1)配置加速器

编写 /etc/docker/daemon.json

cat > /etc/docker/daemon.json <<EOF
{
 "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}
EOF

重启docker服务

systemctl restart docker

检查是否生效

docker info |grep -A 3 'Registry Mirrors'

2)拉取镜像

docker pull busybox
## 这个busybox就是系统镜像名字,是从hub.docker.com拉取镜像

3)查看当前系统镜像

docker image ls
## 或者
docker images

4)搜索镜像

docker search ubuntu
## 如果需要查询镜像版本,访问官网 https://hub.docker.com 
## 搜索对应的镜像名字,然后点tag进入查看

拉取指定版本的镜像

docker pull nginx:1.23.2

5)给镜像打标签

docker tag busybox:latest aminglinux:1.2.3

6)启动容器

docker run -it busybox
## 把镜像启动为容器,-i表示让容器的标准输入打开
## -t 表示分配一个伪终端
## -d 表示后台启动
## 要把 -i -t -d 放到镜像名字前面

7)查看容器

docker ps -a 
## 如果不加 -a ,则不显示已经停止的容器

8)停止容器

docker stop 容器Id
## 容器Id,通过 docker ps 来获取

10)删除容器

docker rm 容器Id
## 如果容器未停止,会报错,则需要加 -f

10)删除镜像

docker rmi aminglinux:1.2.3
## 这里因为aminglinux:1.2.3 为 busybox 的一个tag,所以此操作只会删除此tag
## 并不会真正删除镜像
## 如果该镜像没有tag,则直接删除镜像

也可以直接指定镜像Id进行删除

docker rmi 镜像id

11)拉取镜像+启动容器

docker run -itd redis

12)启动容器时,给容器自定义名字

docker run --name web01 -itd ubuntu

13)容器运行后直接退出并删除

docker run --rm -it ubuntu bash -c "sleep 30"

14)进入容器操作

docker exec -it web01 bash

进去后,相当于进入了一个虚拟机,可以安装其他软件,比如nginx

apt update
apt install -y nginx

15)将容器重新打包成新镜像

docker commit -m "install nginx" -a "aming" web01 nginx_ubuntu:1.0
## 这里的web01可以改为容器Id

在此查看镜像列表,发现多了一个nginx_ubuntu:1.0

16)将镜像保存为一个文件

docker save nginx -o nginx.img

17)将导出的镜像文件导入

docker load -i nginx.img
## 或者
docker load --input nginx.img

18)将容器导出为一个文件

docker export web01 > web01.tar

19)将导出的文件导入为新的镜像

docker import - ubuntu_test < web01.tar

20)docker save 和 docker export 的差异

docker save 保存的是镜像,docker export 保存的是容器
docker save 会保留镜像所有的历史纪录,docker export不会,即没有commit历史
docker load 用来载入镜像包,docker import 用来载入容器包,但两者都会恢复为镜像
docker load 不能对载入的镜像重命名,而docker import 可以为镜像指定新名词

Docker的数据持久化

1.本地目录映射到容器里

mkdir -p /data/
docker run -tid -v /data/:/data ubuntu bash
# -v 用来指定挂载目录
# :前面的/data/为宿主机的本地目录
# :后面的/data/为容器里的目录,会在容器中自动创建

在宿主机本地目录中创建一个文件

echo "hello" > /data/1.txt

再进入容器中查看

docker exec -it 容器Id或者容器名 bash -c "cat /data/1.txt"

2.数据卷

创建数据卷

docker volume create testvol 
## testvol 为数据卷的名字

列出数据卷

docker volume ls

查看数据卷信息

docker volume inspect testvol

使用数据卷

docker run -itd --name aming01 -v testvol:/data/ ubuntu
## 与之前的直接映射本地目录不同,:左边为数据卷的名字

多容器共享一个数据卷

docker run -itd --name aming02 -v testvol:data/ ubuntu

3.将宿主机的文件传输进容器里

docker cp /etc/fstab aming01:/tmp/test.txt
docker exec -it aming01 cat /tmp/test.txt

docker网络

Docker服务启动时会生成一个docker0网卡,这个网卡是实现容器网络通信的根本
默认容器使用的网络类型为桥接(bridge)模式,这个桥接和VMware中的桥接不一样

更类似于VMware中的NAT模式

每启动一个容器,都会产生一个虚拟网卡 vethxxx

查看docker容器网络相关规则

iptables -nvL -t nat 
## 可以看到docker相关规则,容器可以联网,就是靠这些规则实现的

1.host模式

docker run -itd --net=host --name aming03 ubuntu

可以进入容器内,查看hostname 查看IP地址

这种模式容器和宿主机共享主机名、IP

2.container模式

改模式下,启动容器时,需要指定目标容器Id或者name,意思是将要启动的容器使用和目标容器一样的网络,即IP一样

docker run -itd --net=container:/aming01 --name aming04 ubuntu

可以进入容器查看aming01和aming04的网络情况

3.none模式

即不需要配置网络

docker run -itd --net=none --name=aming05 ubuntu_test bash

查看

docker exec -it aming05 bash -c "ip add"

4.birdge模式

也就是默认模式,可以--net=bridge 也可以不指定--net,默认就是bridge

5.端口映射

docker run -itd -v /data/:/var/www/html/ -p 8088:80 --name aming06 ubuntu_test

-p 宿主机监听端口:容器监听端口

posted @   慢乌龟不出事  阅读(26)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示