| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> ??99%的读者??都会收藏的Docker入门到实战的技术文章 -> 正文阅读 |
|
[系统运维]??99%的读者??都会收藏的Docker入门到实战的技术文章 |
文章目录虚拟化技术之docker技术详解(二)关于作者
前言
一、Docker 概念简述1.1 Docker 是什么?
1.2 Docker 版本及支持平台
1.3 为什么要使用Docker 容器技术
1.4 Docker VS 传统虚拟化
1.5 Docker 应用场景
1.6 Docker 设计目标
1.7 Docker 技术架构
1.8 Docker 文件系统类型介绍
1.9 Docker 镜像、容器、仓库核心概念
1.10 Docker 安装
二、Centos 7 构建Docker 平台实战2.1 实验环境
2.2 Docker 部署
2.3 Docker 基础用法
三、Docker 镜像管理3.1 镜像是什么?
3.2 配置加速器Docker Hub是由Docker公司负责维护的公共镜像仓库,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。
3.3 镜像常用管理命令
三、Docker 容器管理3.1 创建容器常用选项
3.2 常用管理命令
3.3 容器和镜像命令实战3.3.1 镜像命令实战总结
3.3.2 容器命令实战总结
3.3.3 资源控制命令总结
3.4 容器数据持久化3.4.1 为什么要容器数据持久化
3.4.2 数据持久化操作案例
3.5 Docker 容器网络3.5.1 docker 容器网络通信原理及配置
3.5.1.1 外部访问容器
|
命令 | 描述 |
---|---|
FROM | 构建新镜像是基于哪个镜像 |
LABEL | 标签 |
RUN | 构建镜像时运行的Shell命令 |
COPY | 拷贝文件或目录到镜像中 |
ADD | 解压压缩包并拷贝 |
ENV | 设置环境变量 |
USER | 为RUN、CMD和ENTRYPOINT执行命令指定运行用户 |
EXPOSE | 声明容器运行的服务端口 |
WORKDIR | 为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录 |
CMD | 运行容器时默认执行,如果有多个CMD指令,最后一个生效 |
构建镜像常用命令
Usage: docker build [OPTIONS] PATH | URL | - [flags]
Options:
-t, --tag list # 镜像名称
-f, --file string # 指定Dockerfile文件位置
# docker build -t shykes/myapp .
# docker build -t shykes/myapp -f /path/Dockerfile /path
# docker build -t shykes/myapp http://www.example.com/Dockerfile
简单的构建镜像案例
[root@web02_server~/dockerfile]# cat dockerfile
FROM centos:7
RUN yum install epel-release -y && \
yum install nginx -y
CMD ["nginx","-g","daemon off;"]
[root@web02_server~/dockerfile]# docker build -t nginx:v1 .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for centos:7
---> eeb6ee3f44bd
Step 2/3 : RUN yum install epel-release -y && yum install nginx -y
---> Running in 1ffcbdc36107
…………(省略)
Dependency Updated:
openssl-libs.x86_64 1:1.0.2k-21.el7_9
Complete!
Removing intermediate container 1ffcbdc36107
---> 32e58021c0b5
Step 3/3 : CMD ["nginx","-g","daemon off;"]
---> Running in 1de98bc362df
Removing intermediate container 1de98bc362df
---> 5662cbdf65e0
Successfully built 5662cbdf65e0
Successfully tagged nginx:v1
# 查看本地构建的镜像(tag 标签为1是自己构建的)
[root@web02_server~/dockerfile]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v1 5662cbdf65e0 3 minutes ago 415MB
#启用一个本地构建的nginx v1版本镜像(这里借用数据持久化环境,创建了/opt/wwwroot/)
[root@web02_server~]# docker run -itd --name web01 -p 90:80 -v /opt/wwwroot/:/usr/share/nginx/html nginx:v1
24528b991b7c26317ae9070f4a6395b68b3c2bb329f9598ac4307bbd773a6192
[root@web02_server~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
24528b991b7c nginx:v1 "nginx -g 'daemon of…" 21 seconds ago Up 20 seconds 0.0.0.0:90->80/tcp, :::90->80/tcp web01
[root@web02_server~]# docker inspect web01|grep -i ipaddr
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
[root@web02_server~]#
[root@web02_server~]# curl http://172.17.0.2:80
<h1>hello</h1>
[root@web02_server~]#
构建nginx 镜像
# 准备一个压缩包,里面放nginx
[root@web02_server~/dockerfile/nginx]# ls
Dockerfile nginx-1.15.5.tar.gz nginx.conf php.conf
# 构建nginx dockerfile
[root@web02_server~/dockerfile/nginx]# cat Dockerfile
FROM centos:7
LABEL maintainer www.ctnrs.com
RUN yum install -y gcc gcc-c++ make \
openssl-devel pcre-devel gd-devel \
iproute net-tools telnet wget curl && \
yum clean all && \
rm -rf /var/cache/yum/*
ADD nginx-1.15.5.tar.gz /
RUN cd nginx-1.15.5 && \
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_stub_status_module && \
make -j 4 && make install && \
mkdir /usr/local/nginx/conf/vhost && \
cd / && rm -rf nginx* && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH $PATH:/usr/local/nginx/sbin
COPY nginx.conf /usr/local/nginx/conf/nginx.conf
WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
# 构建一个 nginx v2版本的----编译安装
[root@web02_server~/dockerfile/nginx]# docker build -t nginx:v2 .
Sending build context to Docker daemon 1.031MB
Step 1/10 : FROM centos:7
…… (省略)
……
---> 6cc9110c56c4
Step 10/10 : CMD ["nginx", "-g", "daemon off;"]
---> Running in a3ab71b03867
Removing intermediate container a3ab71b03867
---> e9548d7e4691
Successfully built e9548d7e4691
Successfully tagged nginx:v2
# 启动一个 nginx 经常,名字 web02
[root@web02_server~]# docker run -itd --name web02 -p 99:80 -v /opt/wwwroot/:/usr/share/nginx/html nginx:v2
456c3451ade36178a5c54e1ff4a318305d4cce2c8a7dec2ffa29086de4187d5e
[root@web02_server~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
456c3451ade3 nginx:v2 "nginx -g 'daemon of…" 12 seconds ago Up 11 seconds 0.0.0.0:99->80/tcp, :::99->80/tcp web02
[root@web02_server~]# docker inspect web02 |grep -i ipaddr
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3",
# 测试访问,发现访问的是nginx 默认页面,为啥呢,因为我们编译安装的网站目录不是 /usr/share/nginx/html,而是自定义的 安装目录:
[root@web02_server~]# curl http://172.17.0.3
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@web02_server~]#
#在运行一个nginx 容器 web03 。
[root@web02_server~]# docker run -itd --name web03 -p 100:80 -v /opt/wwwroot/:/usr/local/nginx/html nginx:v2
d0955979f38020832f7ddd55588b2e1402b78ede45e7a6602cb18c8148c26995
[root@web02_server~]#
# 这里访问的才是我们之前 数据持久化写的 网页
[root@web02_server~]# curl http://172.17.0.4
<h1>hello</h1>
[root@web02_server~]#
管理用户界面
,基于角色的访问控制
,AD/LDAP集成以及审计日志
等,足以满足基本企业需求。https://goharbor.io/
https://github.com/goharbor/harbor
宿主机环境
主机名 | IP地址 | 系统内核 |
---|---|---|
HB-XYJF-nginx-node1 | 10.0.0.91 | CentOS Linux release 7.6.1810 |
docker01 | 10.0.0.8 | CentOS Linux release 7.6.1810 |
实验部署先决条件
# 服务器硬件配置:
? 最低要求:CPU2核/内存4G/硬盘40GB
? 推荐:CPU4核/内存8G/硬盘160GB
# 软件:
? Docker CE 17.06版本+
? Docker Compose 1.18版本+
# Harbor安装有2种方式:
? 在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小
? 离线安装:安装包包含部署的相关镜像,因此安装包比较大
本次测试,采用离线部署方式
下载安装Docker
# 官方安装教程
[root@docker-server~]# yum install -y yum-utils
[root@docker-server~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker-ce
yum install -y docker-ce
# 配置加速器
参照前面加速器配置
下载安装Docker Compose
# 下载地址:https://github.com/docker/compose/releases
# 上传 compose 和 harbor
[root@docker01~]# ls
anaconda-ks.cfg harbor-offline-installer-v2.0.0.tgz
docker-compose-Linux-x86_64 nohup.out
pipework szz-job-v1.jar
# 下载完成后,通过工具上传到服务器,这步忽略。
。
#对docker-compose文件增加执行权限,移动到sbin目录下面
[root@docker01~]# chmod o+x docker-compose-Linux-x86_64
[root@docker01~]# mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
#查看docker-compose版本,是否生效。
[root@docker01~]# docker-compose
Define and run multi-container applications with Docker.
Usage:
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help
Options:
-f, --file FILE Specify an alternate compose file
(default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name
(default: directory name)
-c, --context NAME Specify a context name
--verbose Show more output
--log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--no-ansi Do not print ANSI control characters
…………(忽略)
# 执行 docker-compose 可以查看到使用参数即可,表示docker-compose安装成功
上传、解压离线包
# 上传步骤忽略
# 解压
[root@docker01~]# tar xf harbor-offline-installer-v2.0.0.tgz
# 进入harbor/ 目录
[root@docker01~]# cd harbor/
[root@docker01~/harbor]# ls
common.sh harbor.v2.0.0.tar.gz harbor.yml.tmpl install.sh LICENSE prepare
# 拷贝一个配置文件,软件自带有一个tmpl的模板文件,可以通过复制此文件进行编辑。
[root@docker01~/harbor]# \cp harbor.yml.tmpl harbor.yml
[root@docker01~/harbor]# ls
common.sh harbor.yml install.sh prepare
harbor.v2.0.0.tar.gz harbor.yml.tmpl LICENSE
[root@docker01~/harbor]#
修改配置文件
# 修改 第 5行
5 hostname: 10.0.0.8 # 默认写的域名访问,这里我直接写服务器IP,访问的域名
# 关闭 https 证书,我这里13-18行,全部注释掉,不使用https证书
13 #https:
14 # # https port for harbor, default is 443
15 # port: 443
16 # # The path of cert and key files for nginx
17 # certificate: /your/certificate/path
18 # private_key: /your/private/key/path
# 设置harbor 管理员密码 ,第34行。
34 harbor_admin_password: Harbor12345
# 第47行,harbor的数据存储位置
data_volume: /data
安装harbor
# 拉取镜像,做初始化配置文件,Harbor服务就会根据当前目录下的harbor.yml文件开始下载依赖的镜像,检测并按照顺序依次启动
[root@docker01~/harbor]# ./prepare
prepare base dir is set to /root/harbor
Unable to find image 'goharbor/prepare:v2.0.0' locally
# 在的当前目录执行./install.sh,进行harbor安装(导入镜像)
[root@docker01~/harbor]# ./install.sh
[Step 0]: checking if docker is installed ...
Note: docker version: 20.10.8
[Step 1]: checking docker-compose is installed ...
Note: docker-compose version: 1.26.0
[Step 2]: loading Harbor images ...
Loaded image: goharbor/notary-signer-photon:v2.0.0
Loaded image: goharbor/clair-adapter-photon:v2.0.0
…………(省略)
Creating redis ... done
Creating harbor-db ... done
Creating harbor-core ... done
Creating harbor-jobservice ... done
Creating nginx ... done
? ----Harbor has been installed and started successfully.----
安装成功,此时浏览器输入 10.0.0.8 访问,输入用户名、密码
admin
Harbor12345
测试:浏览器输入http://10.0.0.8
打标签、上传/拉取镜像
# 因为采用的http ,所以连接推送会拒绝,因此我先做个信任
# 配置http镜像仓库可信任
[root@docker01/etc/docker]# vim daemon.json
{
"registry-mirrors":["https://b9pmyelo.mirror.aliyuncs.com"],
"insecure-registries":["10.0.0.8"]
}
# 重启docker
[root@docker01~/harbor]# systemctl start docker
[root@docker01~/harbor]# cd --
[root@docker01~]# cd harbor/
[root@docker01~/harbor]# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------
harbor-core /harbor/entrypoint.sh Up (healthy)
harbor-db /docker-entrypoint.sh Up (healthy) 5432/tcp
harbor-jobservice /harbor/entrypoint.sh Exit 137
harbor-log /bin/sh -c /usr/local/bin/ Up (healthy) 127.0.0.1:1514->10514/tcp
...
harbor-portal nginx -g daemon off; Up (healthy) 8080/tcp
nginx nginx -g daemon off; Up (healthy) 0.0.0.0:80->8080/tcp,:::80
->8080/tcp
redis redis-server Up (healthy) 6379/tcp
/etc/redis.conf
registry /home/harbor/entrypoint.sh Up (healthy) 5000/tcp
registryctl /home/harbor/start.sh Up (healthy)
# 使用docker-compose 批量管理容器
[root@docker01~/harbor]# docker-compose up -d
harbor-log is up-to-date
registryctl is up-to-date
registry is up-to-date
harbor-db is up-to-date
redis is up-to-date
harbor-portal is up-to-date
harbor-core is up-to-date
nginx is up-to-date
harbor-jobservice is up-to-date
[root@docker01~/harbor]#
# 首次推送,它会提示没有推送权限的(这里我们可以登录,在推送,也可以修改配置文件)
[root@docker01~/harbor]# docker push 10.0.0.8/library/nginx:v2
The push refers to repository [10.0.0.8/library/nginx]
0372836c6231: Preparing
09b1a253ff74: Preparing
b7748bf7f3c7: Preparing
5f74203d35b5: Preparing
174f56854903: Preparing
unauthorized: unauthorized to access repository: library/nginx, action: push: unauthorized to access repository: library/nginx, action: push
[root@docker01~/harbor]#
# 登录10.0.0.8 输入用户 admin 密码Harbor12345
[root@docker01~/harbor]# docker login 10.0.0.8
Username: admin
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
# 登录后,再次推送。同送成功
[root@docker01~/harbor]# docker push 10.0.0.8/library/nginx:v2
The push refers to repository [10.0.0.8/library/nginx]
0372836c6231: Pushed
09b1a253ff74: Pushed
b7748bf7f3c7: Pushed
5f74203d35b5: Pushed
174f56854903: Pushed
v2: digest: sha256:3a10d0eebb837296f16a90dce9fa3f18d453d45c5dca3e132dcd7808eb228469 size: 1370
# 然后可以去客其它机器下载,这里我以 10.0.0.91这台机器去下载
1.首先还是要先做信任
2.重启docker 服务
3.拉去
[root@HB-XYJF-nginx-node1~]# vim /etc/docker/daemon.json
{
"registry-mirrors":["https://b9pmyelo.mirror.aliyuncs.com"],
"insecure-registries":["10.0.0.8"]
[root@HB-XYJF-nginx-node1~]# systemctl restart docker
[root@HB-XYJF-nginx-node1~]# docker pull 10.0.0.8/library/nginx:v2
v2: Pulling from library/nginx
2d473b07cdd5: Pull complete
81bf2c135455: Pull complete
ef0246aa7a1d: Pull complete
3bf8f2b88785: Pull complete
24dfce654dbf: Pull complete
Digest: sha256:3a10d0eebb837296f16a90dce9fa3f18d453d45c5dca3e132dcd7808eb228469
Status: Downloaded newer image for 10.0.0.8/library/nginx:v2
10.0.0.8/library/nginx:v2
[root@HB-XYJF-nginx-node1~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.8/library/nginx v2 e9548d7e4691 23 hours ago 377MB
[root@HB-XYJF-nginx-node1~]#
# 启动下载后的一个容器
[root@HB-XYJF-nginx-node1~]# docker run -itd -p 88:80 --name web01 10.0.0.8/library/nginx:v2
fe8e3a5568849dd943970049d924fcacc766b1d00243dc7a99792cefd69a3084
博文回顾
本篇文章详细的介绍了Docker 概念、基础语法、容器管理、镜像制作、搭建私有仓库等,从0到1,非常详细,当你遇到了这篇文章,欢迎大家一起学习,交流技术。如果你认真看完我的文章,相信你可以掌握docker 基础使用,面对企业项目可以快速上手。
下一篇文章,我会分享 docker 更偏向于实战的技术,介绍一篇案列,欢迎订阅。
如果喜欢博主的博文,欢迎访问:首页链接,进行专栏订阅!
linux 云计算专栏
ansible 自动化运维详解
linux 系统基础优化
……
下面是博主写的博文笔记,如果喜欢,可以私信,赠送给老铁/粉丝们
纵有狂风拔地起,我亦乘风破万里
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 18:18:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |