docker入门

70 阅读6分钟

docker

入门

对 Docker 最简单并且带有一定错误的认知就是 “Docker 是一种性能非常好的虚拟机”。可以粗略的理解为就是虚拟机

正如上面所说,这是有一定错误的说法。Docker 相比于传统虚拟机的技术来说先进了不少,具体表现在 Docker 不是在宿主机上虚拟出一套硬件后再虚拟出一个操作系统,而是让 Docker 容器里面的进程直接运行在宿主机上(Docker 会做文件、网络等的隔离),这样一来 Docker 会 “体积更轻、跑的更快、同宿主机下可创建的个数更多”。

Docker 中有三个核心概念:Image、Container、Repository。

  • Image: 有领“好人卡”倾向的广大程序猿一定对 镜像 的概念不会陌生。但和 windows 的那种 iso 镜像相比,Docker 中的镜像是分层的,可复用的,而非简单的一堆文件迭在一起(类似于一个压缩包的源码和一个 git 仓库的区别)。
  • Container: 容器的存在离不开镜像的支持,他是镜像运行时的一个载体(类似于实例和类的关系)。依托 Docker 的虚拟化技术,给容器创建了独立的端口、进程、文件等“空间”,Container 就是一个与宿机隔离 “容器”。容器可宿主机之间可以进行 port、volumes、network 等的通信。
  • Repository: Docker 的仓库和 git 的仓库比较相似,拥有仓库名、tag。在本地构建完镜像之后,即可通过仓库进行镜像的分发。常用的 Docker hub 有 hub.docker.com/cr.console.aliyun.com/ 等。

概念

容器卷

容器卷:对容器里面的数据进行持久化。

默认情况下容器卷存放在/var/lib/registry

特点:

1:数据卷可在容器之间共享或重用数据(实际是共用一份文件)

2:卷中的更改可以直接实时生效

3:数据卷中的更改不会包含在镜像的更新中

4:数据卷的生命周期一直持续到没有容器使用它为止

在容器卷里的数据会同步到宿主机上面,宿主机上的数据也会同步到容器里。

安装

1.先安装gcc、gcc++

yum -y install gcc
yum -y install gcc-c++

2.安装yum-utils

yum install -y yum-utils

3.安装仓库

设置阿里云仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.安装docker

安装最新版的docker

yum install docker-ce docker-ce-cli containerd.io -y -y

5.启动docker

systemctl start docker
#设置开机自启
systemctl enable docker

6.查看进程

ps -aux | grep docker

7.配置阿里云镜像加速

需要先去申请阿里的docker容器个人版(免费)

修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hduehqjo.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

命令

启动类

# 启动docker
systemctl start docker
# 关闭docker
systemctl stop docker
# 重启docker
systemctl restart docker
# 查看docker状态
systemctl status docker
# 开机启动docker
systemctl enable docker
# 查看docker信息
docker info 
# 查看总体命令帮助文档
docker --helpe
# 查看具体命令帮助文档
docker 具体命令 --help

操作类

#查看本机存在的镜像
docker images
    -a :列出本地所有镜像(含历史映像层)
    -q :只显示镜像ID
# 查询镜像(在远程仓库中寻找)
docker search 镜像名
    --limit 5 redis #只显示前5个# 下载镜像
docker pull 镜像名
    # 默认不加:[TAG]就是:latest
    # docker pull redis:版本号# 查看镜像/容器/数据卷所占的空间
docker system df# 删除镜像
docker rmi 镜像id
    -f :强制删除
# 删除全部 docker rmi -f $(docker images -qa)# 查看当前正在运行的docker
docker ps
    -a: 正在运行的所有容器+历史上运行过的
    -l: 显示最近创建的容器
    -n: 最近创建的n个容器
    -q: 静默模式,只显示容器编号

容器操作

# docker 运行Ubuntu容器并返回一个交互终端
# 注意,如果启动Ubuntu这类容器,如果只是后台运行(-d),没有bash启动后容器会马上自杀,因为容器会认为没有应用在运行
docker run -it ubuntu /bin/bash
    i: interactive 交互
    t: tty 终端
    --name="": 指定容器名称
    -d :后台运行
    -p: 指定端口运行(小写) 8080:80 ->主机的8080端口映射到容器 的80端口
    -P: 随机端口运行(大写)
    
# 退出容器
exit 
ctrl+p+q # run进去的容器,退出界面但是容器依然运行# 启动已经停止运行的容器
# 已经run过的容器,只能用start开启
docker start 容器名/容器ID
​
# 重启容器
docker restart 容器名
​
# 停止容器
docker stop 容器名
​
# 强制停止容器
docker kill 容器名
​
# 删除容器
docker rm 容器名
    -f 强制删除
# 进入正在运行的容器输入命令
docker exec -it <容器ID或名称> /bin/bash
​
#查看日志
docker logs 容器名
​
#启动docker自动启动该容器
docker update 容器名 --restart=always

其他

# 查看容器详细信息
docker inspect 容器id# 进入正在运行的容器shell,使用exec再使用exit退出不会导致容器关闭,如果使用attach再使用exit会导致容器关闭
docker exec -it 容器id
# ubuntu 进入要使用 docker exec -it {id} /bin/bash# 可以直接进入容器
docker attach {id}
​
# 把容器内的文件拷贝到主机上
docker cp 容器id:/文件路径 /主机路径
​
# 导出容器
docker export 容器id > 文件名.tar
​
# 导入容器
cat 文件.tar | docker import -镜像名:版本号/镜像用户
​
# 通过修改容器,commit后制造自定义的镜像
docker commit -m="描述信息" -a="作者" 容器ID 镜像名:版本号 
​
# 容器的继承
# 容器继承容器并不会复制容器的运行状态,只是继承了容器的配置和文件系统状态。如果需要完全复制容器的运行状态,可以考虑使用 docker commit 命令前先停止容器,然后再启动新容器。可以粗略的理解就是复制了一个容器
docker run -it --volumes-from 父类

把容器内的文件挂载到宿主机上

默认情况容器的文件是挂载在宿主机的/var/lib/docker

使用-v 可以指定共用文件

docker run -it -v /宿主机路径:/容器内路径 镜像名
# 使用--privileged=true 可以开启容器特权,让容器拥有操作宿主机资源的权限

把本地镜像推送到远程仓库

1.创建符合规范的镜像

docker tag 镜像:Tag 主机名:端口/仓库名:tag
docker tag myUbuntu:1.0 192.168.1.1:8080/myUbuntu:1.0

2.配置/etc/docker/daemon.json (docker默认不允许使用http的方式推送镜像,所以需要添加以下配置)

在配置文件中添加以下配置(记得重启)

{
    "insecure-registries":["192.168.1.1:8080"],
}

3.把镜像推送到仓库中

docker push 192.168.1.1:5000/myUbuntu:1.0

4.查看仓库的内容

curl -XGET http://192.168.1.1:8080/v2/_catalog

5.从远程仓库中下载镜像回本地

docker pull 192.168.1.1:8080/myUbuntu:1.0