Docker
2022/1/14 23:34:17
本文主要是介绍Docker,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Docker
- 什么是Docker
- Docker的基本组成
- Docker和虚拟机
- Docker的应用场景
- Docker环境的安装
- 镜像管理
- 什么是镜像
- 修改国内源
- 基础命令
- 容器管理
- 创建容器常用选项
- 资源限制选项
- 容器管理常用命令
- Docker数据卷
- volumes管理指令
- bind mounts
- Docker的网络管理
- Dockerfile
- Dockerfile指令
- Build镜像命令
- Dcoker仓库harbor
- 创建一个项目和用户
- 将镜像上传harbor
什么是Docker
- 使用广泛的开源容器引擎
- 一种操作系统级的虚拟技术
- 依赖于Linux内核特性:Namespaces和Cgroups
- 一个简单的程序打包工具
Docker的基本组成
- Docker Client 客户端
- Docker daemon 守护进程
- Docker Image 镜像
- Docker Container 容器
- Docker Registry 仓库
Docker和虚拟机
Docker | 虚拟机 | |
---|---|---|
启动速度 | 秒级 | 分钟级 |
运行性能 | 接近原生 | 5%左右的损失 |
磁盘占用 | MB | GB |
数量 | 成百上千 | 一般几十台 |
隔离性 | 进程级别 | 系统级别 |
操作系统 | 只支持Linux | 几乎所有 |
封装程度 | 只打包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统 |
Docker的应用场景
- 应用程序的打包和发布
- 应用程序的隔离
- 持续集成
- 部署微服务
- 快速搭建测试环境
- 提供PaaS产品
Docker环境的安装
官方文档安装地址: https://docs.docker.com/engine/install/centos/
- 下载docker的yum源
yum install yum-utils yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
- 配置阿里云源
- 安装Docker
yum install docker-ce
- 启动docker
systemctl start docker systemctl enable docker
- 测试
[root@localhost yum.repos.d]# docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:09ca85924b43f7a86a14e1a7fb12aadd75355dea7cdc64c9c80fb2961cc53fe7 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
镜像管理
什么是镜像
一个不包括linux内核的简易的Linux系统
修改国内源
[root@localhost ~]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] } [root@localhost ~]# systemctl restart docker
基础命令
查看本地所有的镜像
[root@localhost ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 3 months ago 13.3kB
查看一个镜像的创建历史
[root@localhost ~]# docker image history hello-world IMAGE CREATED CREATED BY SIZE COMMENT feb5d9fea6a5 3 months ago /bin/sh -c #(nop) CMD ["/hello"] 0B <missing> 3 months ago /bin/sh -c #(nop) COPY file:50563a97010fd7ce… 13.3kB
查看一个镜像的详细信息
[root@localhost ~]# docker image inspect hello-world
从仓库中拉取一个镜像
[root@localhost ~]# docker image pull centos Using default tag: latest latest: Pulling from library/centos a1d0c7532777: Pull complete Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 Status: Downloaded newer image for centos:latest docker.io/library/centos:latest
删除一个镜像
[root@localhost ~]# docker image rm hello-world Untagged: hello-world:latest Untagged: hello-world@sha256:09ca85924b43f7a86a14e1a7fb12aadd75355dea7cdc64c9c80fb2961cc53fe7 Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412 Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359
给一个镜像打标签
[root@localhost ~]# docker tag centos:latest centos:8.4 [root@localhost ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE centos 8.4 5d0da3dc9764 3 months ago 231MB centos latest 5d0da3dc9764 3 months ago 231MB
保存一个镜像到本地
[root@localhost ~]# docker image save centos:8.4 > centos:8.4.tar.gz [root@localhost ~]# ll centos:8.4.tar.gz -rw-r--r--. 1 root root 238581248 Jan 13 00:15 centos:8.4.tar.gz
导入一个镜像
[root@localhost ~]# docker image rm centos:8.4 Untagged: centos:8.4 [root@localhost ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5d0da3dc9764 3 months ago 231MB [root@localhost ~]# docker load < centos\:8.4.tar.gz Loaded image: centos:8.4 [root@localhost ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE centos 8.4 5d0da3dc9764 3 months ago 231MB centos latest 5d0da3dc9764 3 months ago 231MB
导出一个容器
docker export 'CONTAINER ID' > xxxx.tar
导入容器创建镜像
docker image import xxxx.tar 名字:标签
容器管理
创建容器命令:
[root@localhost ~]# docker run -itd --name centos centos:8.4
创建容器常用选项
选项 | 描述 |
---|---|
-i | 交互式 |
-t | 分配一个伪终端 |
-d | 运行容器到后台 |
-a list | 附加到运行的容器 |
--dns list | 设置DNS服务器 |
-e | 设置环境变量 |
--env-file list | 从文件读取环境变量 |
-p list | 发布容器端口到主机 |
-P | 发布容器所有EXPOSE的端口到宿主机的随机端口 |
-h | 设置容器主机名 |
--ip string | 指定容器IP,只能用于自定义网络 |
--link list | 添加连接到另一个容器 |
--network | 连接容器到一个网络 |
--mount | 挂载宿主机分区到容器 |
-v | 挂载宿主机目录到容器 |
--restart string | 容器退出时重启策略,默认no |
--add-host list | 添加其他主机到容器中/etc/hosts |
资源限制选项
容器管理常用命令
使用方法: docker container [选项] 选项: ls 列出容器 inspect 显示一个或多个容器详细信息 attach 附加本地标准输入,输出和错误到一个运行的容器 exec 在运行容器中执行命令,也可以进入一个容器 commit 创建一个新镜像来自一个容器 cp 拷贝文件或者文件夹到容器 logs 获取一个容器的日志 port 列出或指定容器端口映射 stats 显示容器资源使用统计 top 显示一个容器运行的进程 update 更新一个或多个容器的配置 stop/start 停止/启动一个或多个容器 rm 删除一个或多个容器
Docker数据卷
Docker提供三种不同的方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs
volumes:Docker管理宿主机文件系统的一部分(/var/lib/dokcer/volumes)
bind mounts:可以存储在宿主机系统的任意位置
tmpfs:挂载存储在宿主机内存中,而不会写入宿主机的文件系统
volumes管理指令
[root@192 ~]# docker volume --help Usage: docker volume COMMAND Manage volumes Commands: create Create a volume inspect Display detailed information on one or more volumes ls List volumes prune Remove all unused local volumes rm Remove one or more volumes Run 'docker volume COMMAND --help' for more information on a command.
挂载实例:
- 创建一个volume
docker volume create nginx-vol
- 用卷创建一个容器
docker run -d -it --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
bind mounts
- 用卷创建一个容器:
docker run -d -it --name=nginx02 --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
注意:
如果挂载目标在容器中非空目录,则改目录现有内容将会被隐藏。
Docker的网络管理
Docker支持5种网络模式
bridge:默认网络,Docker启动后默认创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。
host:容器不会获得一个独立的network namespace,而是与宿主机共用一个
none:获取独立的network namespace,但不为容器进行任何网络配置
container:与指定的容器使用同一个network namespace,网卡配置也都是相同的
自定义:自定义网桥,默认与bridge网络一样。
Dockerfile
Dockerfile指令
指令 | 描述 |
---|---|
FROM | 构建新镜像基于哪个镜像,例如:FROM centos:7 |
MAINTAINER | 描述这个Dockerfile的作者信息,例如:MAINTAINER xxxxx xxxxxxx@163.com |
RUN | 构建镜像时运用的shell命令,例如:RUN yum install httpd |
CMD | 运行容器时执行的shell命令 |
EXPOSE | 声明容器运行的服务端口 |
ENV | 设置容器内环境变量,例如设置JAVA_HOME |
ADD | 拷贝文件或目录到镜像,自动解压压缩包,例如:ADD html.tar.gz /usr/local/html |
USER | 为RUN和CMD设置运行用户 |
COPY | 拷贝文件或目录到镜像,用法同上 |
WORKDIR | 为RUN和CMD设置工作目录 |
HEALTHCHECK | 健康检查 |
ARG | 构建镜像时设置一个变量,可以在build的时候导入 |
Build镜像命令
docker build 参数: -t #镜像名称 -f #指定Dockerfile文件位置
Dcoker仓库harbor
- 下离线安装包,直接官网下载就好
https://github.com/goharbor/harbor/releases
- 安装Docker
- 安装docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose version
- 自签TLS证书
解压harbor-offline-installer-v1.4.0.tgz
tar -xzvf harbor-offline-installer-v1.4.0.tgz
创建证书
harbor23.com这里是我harbor仓库的域名,即harbor配置文件中hostname的值,也可以写ip
cd harbor mkdir ssl cd ssl openssl genrsa -out ca.key 4096 openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/CN=harbor23.com" -key ca.key -out ca.crt openssl genrsa -out server.key 4096 openssl req -new -sha512 -subj "/CN=harbor23.com" -key server.key -out server.csr cat > v3.ext <<-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1=harbor23.com EOF openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
- 修改harbor.cfg配置文件
主要修改一下参数
hostname = harbor23.com ui_url_protocol = https ssl_cert = ./ssl/server.crt ssl_cert_key = ./ssl/server.key harbor_admin_password = 123
- 安装
./prepare ./install.sh
- 配置hosts域名解析
C:\Windows\System32\drivers\etc\hosts - 访问配置文件中设置的hostname
admin/配置文件中设置的密码
创建一个项目和用户
将新建的用户加入test项目
将镜像上传harbor
- 在docker镜像机器上加入证书
mkdir /etc/docker/certs.d/harbor23.com -p scp 192.168.168.130:/root/harbor/ssl/server.crt /etc/docker/certs.d/harbor23.com
- 在daemon.json文件中配置
[root@192 harbor23.com]# cat /etc/docker/daemon.json { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn" ], "insecure-registries": [ "harbor23.com" ] }
- 测试连接
[root@192 harbor23.com]# docker login harbor23.com Username: xcn Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
- 上传镜像
docker tag nginx harbor23.com/test/nginx:v1 docker push harbor23.com/test/nginx:v1
- 下载镜像
docker pull harbor23.com/test/nginx:v1
这篇关于Docker的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26alpine构建的镜像无法使用docker exec -it 进入内部怎么办?-icode9专业技术文章分享
- 2024-12-24Docker环境部署资料详解
- 2024-12-24Docker环境部署教程:新手入门详解
- 2024-12-24Docker环境部署项目实战教程
- 2024-12-24Docker环境部署学习:初学者指南
- 2024-12-24Docker环境部署入门:新手必读指南
- 2024-12-20Docker部署资料:新手入门教程
- 2024-12-19Docker部署实战:新手入门教程
- 2024-12-19Docker部署教程:新手入门详解
- 2024-12-09云原生周刊:在Docker上部署大语言模型