陈奇网络工作室

Docker入门和实战演练(1)

系统运输

一.前言

docker是一个开源APP应用程序容器引擎,它使开发人员能够将他们的APP应用程序打包到依赖的可移植容器中,并将其发布到流行的Linux计算机或进行虚拟化。 容器完全使用沙箱机制,相互之间没有接口。 几乎没有性能开销,可以在机器和数据中心上轻松运行。

二. Docker的基本构成

1 .镜像(图像)。

镜像是面向对象的类,相当于模板。 本质上,镜像相当于文件系统。 Docker镜像是一种特殊的文件系统,它提供运行容器所需的程序、库、资源和配置等文件,还包含运行时准备的配置参数,如匿名卷、环境变量和用户。 镜像不包含动态数据,并且在生成后其内容保持不变。

2 .容器)。

容器是类创建的实例,也是基于名为镜像的模板创建的实体。 容器的本质是进程,但与直接在主机上运行的进程不同,容器进程在自己的独立命名空间中运行。 因此,容器可以有自己的根文件系统、自己的网络配置、自己的进程空间,甚至还有自己的用户ID空间。 容器中的进程在隔离环境中运行,使用起来就像在独立于宿主的系统上运行一样。 与直接在主机上运行相比,此特性使应用容器包更安全。

3 .仓库(储存库)

从认知上看,仓库就像一个软件包上传站,上传了各种软件的不同版本供用户下载。 镜像生成完成后,可以在当前主机计算机上轻松运行,但如果需要在其他服务器上使用此镜像,则需要集中存储和分发镜像的服务。 文档注册表就是这样的服务。

文档生成器的优势

1 .更好地利用系统资源: Docker系统资源利用率较高,因为容器不需要额外的费用,如硬件虚拟化和运行完整的操作系统。 无论是执行APP复制的速度、内存丢失还是文件存储的速度,都比传统的虚拟机技术更高效。 因此,具有相同配置的主机往往能够执行比虚拟机技术更多的APP应用程序。

2 .更快的启动时间:传统的虚拟机技术通常需要几分钟来启动APP应用服务,但Docker容器APP应用直接在主机内核上执行,不需要启动完整的操作系统,甚至达到秒级。

3 .连贯执行环境:开发过程中的一个常见问题是环境一致性问题。 有些错误在开发过程中未被发现,因为开发环境、测试环境和生产环境不匹配。 Docker镜像提供了一个完整的非内核运行时环境,以确保APP应用程序运行时环境的一致性,从而避免了这种情况。

4 .连续交付和部署: Docker是一个build once,使用runeverywhere.docker,您可以通过定制APP融合镜像来实现连续集成、连续交付和部署。 开发人员可以通过Dockerfile构建镜像,并结合Continuous Integration系统进行集成测试。 另一方面,承运人可以直接快速将镜像部署到生产环境中。

5 .更轻松的迁移: Docker使用的分层存储和镜像技术使重复部分的重用变得更容易,APP应用的维护和更新也变得更容易,在基础镜像的基础上进一步扩展镜像也变得非常简单。

传统开发流程

文档环境开发流程

4 .与传统虚拟机的比较

五.文档命令

1 .创建镜像

1.1基于现有镜像容器创建

? docker commit [ options ] container [ repository [:tag ] ]

option:-a,--author=“”#作者信息

-m,--message=“” #提交信息

p, --pause=true #提交时暂停容器的运行

1.2基于本地模板导入创建

docker load ***.tar --本地模板文件tar

1.3基于文档文件生成镜像

文档构建器- t image-name basedir

2 .删除镜像

文档RMI图像#图像可以是标签或ID

docker RMIf image #强制删除镜像

注意:使用docker rmi命令删除镜像时,请先删除容器,然后再删除镜像。 否则,镜像将在容器中执行。

镜像管理命令

3 .创建/启动/停止/删除容器

在docker create image #中创建的容器处于停止状态

文档开始/停止容器_ id #启动/停止容器

创建和启动文档运行图像#容器

删除docker rm container_id #容器

创建容器的通用选项

集装箱管理的一般命令

4 .镜像与容器联系

镜像不是由单个文件组成,而是由多个层组成。 docker history ID/NAME允许您查看镜像中每个层的内容和大小。 每个层都对应于docker文件中的命令。 默认情况下,Docker镜像存储在/var/lib/docker/storage-driver中。

集装箱其实在后视镜的最上面加了读写层。 在运行容器时对文件所做的更改将写入此读写层。 如果容器被删除,最上面的读写层也会被删除,更改也会丢失。

Docker使用存储驱动程序管理容器层,该层镜像每个层的内容和可读写层。

5 .将主机数据装载到容器中

Docker通过三种不同的方法将数据从宿主机装载到容器中:卷、绑定装载和tmpfs。

volumes:Docker管理主机文件系统的一部分(/var/lib/docker/volumes )。

bind mounts :可以存储在主机系统的任意位置。

tmpfs装载到宿主机系统的内存中,而不写入宿主机的文件系统。

5.1体积

注意:

#如果未指定卷,则会自动创建。

建议使用--mount。 更一般。

5.2绑定装载

注意:

#如果源文件/目录不存在,则不会自动创建并抛出错误。

#如果挂载的目录在容器中不是空的,则会隐藏该目录的现有内容。

5.3 tmpfs

在容器中使用tmpfs :

# docker run-d-it-- name nginx-test-- mount type=tmpfs,destination=/usr/share/nginx/html nginx

# docker run-d-it---name nginx-test---tmpfs/usr/share/nginx/html nginx

注意:

# tmpfs方法仅存储在主机系统的内存中,不会写入主机的文件系统。

# tmpfs装载不能在容器之间共享。

# tmpfs仅在Linux容器上运行,在Windows容器上不起作用。

Docker实战构建-LNMP环境,构建WordPress博客

实验环境:

1 .安装文件库

首先安装依赖软件包

安装Docker (因为以前安装过,所以表示已经安装) )。

检查Docker是否已成功安装

启动Docker,添加启动自动启动

[ root @ localhost~] # systemctlstartdocker

[ root @ localhost~] #系统管理器

使用Dockerfile方法构建镜像

文档文件命令

环境说明:

在这篇文章中,我基于centos 7.5系统、nginx和php的源代码包构建。 如果不想使用源包,也可以用yum方式生成。

nginx是使用源包构建的。 版本为nginx-1.12.2.tar.gz,下载地址为http://nginx.org/en/download.html /

php由php-5.6.31.tar.gz和下载位置http://php.net/downloads.php的源软件包构建

创建镜像所需的文件

在Dockerfiles目录下创建了两个目录( nginx、php ),分别存储了Dockerfile文件和源文件包。 nginx目录包含nginx.conf配置文件,php目录也包含php.ini配置文件。 (在实际环境中,这两个文件需要频繁修改。 单独取出后,可以在启动容器时将其装载到容器上,以便于管理。 请参阅。

2.1构建nginx

文档文件内容:

让我们分析一下文档文件的内容。 生成镜像时,将根据组织的内容一步一步地执行,如果不执行任何步骤,生成将立即停止。 上面的大部分命令都很好理解。 可以对照上面的Dockerfile命令映射来理解。 详细说明最后的命令。 CMD [& #039;/sbin/nginx& #039;& #039; -g& #039;& #039; 关闭日期; & #039; ]

./sbin/nginx是正常启动nginx服务;

-g :设置配置文件外的全局指令。 也就是说,nginx启动时会设置daemon off参数。 缺省参数为on,表示是否将nginx作为守护进程运行。 守护进程是与终端分离并在后台运行的进程。 这里关闭,不要让它在后台运行。 为什么不在启动nginx容器时让其在后台运行呢? 默认情况下,docker容器将容器中的第一个进程(即pid=1的程序)作为docker容器是否正在运行的依据。 如果docker容器的pid挂起,docker容器将直接结束。

nginx.conf的内容

配置中主要添加了名为location ~ .php的部分的内容。 其中fastcgi_pass的lnmp_php,这是以后启动php容器时的名称。 如果符合php请求,则会将其转发到名为lnmp_php的容器php-fpm服务器进行处理。 通常,如果php服务不是在容器中运行,则lnmp_php内容通常会写php服务器的Ip地址。

build构建nginx镜像

切换到nginx目录:

内部版本:

[ root @ localhost nginx ] # docker build-t nginx:1.12.2

检查是否成功生成了镜像:

2.2构建PHP

文档文件内容

php.ini的内容( PHP的默认配置内容也可以。 真正找不到的东西请复印并粘贴) )。

[PHP]

engine=On

short_open_tag=Off

asp_tags=Off

precision=14

output_buffering=4096

zlib.output_compression=Off

implicit_flush=Off

unserialize_callback_func=

serialize_precision=17

disable_functions=

disable_classes=

zend.enable_gc=On

expose_php=On

max_execution_time=300

max_input_time=300

memory_limit=128M

error _ reporting=e _ all~e _ deprecated~e _ strict

display_errors=Off

display_startup_errors=Off

log_errors=On

log_errors_max_len=1024

ignore_repeated_errors=Off

ignore_repeated_source=Off

report_memleaks=On

track_errors=Off

html_errors=On

variables_order=GPCS

request_order=GP

register_argc_argv=Off

auto_globals_jit=On

post_max_size=32M

auto_prepend_file=

auto_append_file=

default_mimetype=text/html

always _ populate _ raw _ post _ data=-1

doc_root=

user_dir=

enable_dl=Off

file_uploads=On

upload_max_filesize=2M

max_file_uploads=20

allow_url_fopen=On

allow_url_include=Off

default_socket_timeout=60

CLI服务器

cli_server.color=On

[Date]

date.timezone=Asia/Shanghai

[filter]

[iconv]

[intl]

[sqlite]

[sqlite3]

[Pcre]

[Pdo]

[Pdo_mysql]

pdo_Mysql.cache_size=2000

pdo_MYSQL.default_socket=

[Phar]

[mail function]

SMTP=localhost

smtp_port=25

mail.add_x_header=On

[SQL]

sql.safe_mode=Off

[ODBC]

odbc.allow_persistent=On

odbc.check_persistent=On

odbc.max_persistent=-1

odbc.max_links=-1

odbc.defaultlrl=4096

odbc.defaultbinmode=1

[Interbase]

ibase.allow_persistent=1

ibase.max_persistent=-1

ibase.max_links=-1

ibase.timestamp format=% y-% m-% d % h:% m:% s

ibase.dateformat=%Y-%m-%d

ibase.timeformat=%H:%M:%S

[MySQL]

mysql.allow_local_infile=On

mysql.allow_persistent=On

mysql.cache_size=2000

mysql.max_persistent=-1

mysql.max_links=-1

mysql.default_port=

mysql.default_socket=

mysql.default_host=

mysql.default_user=

mysql.default_password=

mysql.connect_timeout=60

mysql.trace_mode=Off

[MySQLi]

mysqli.max_persistent=-1

mysqli.allow_persistent=On

mysqli.max_links=-1

mysqli.cache_size=2000

mysqli.default_port=3306

mysqli.default_socket=

mysqli.default_host=

mysqli.default_user=

mysqli.default_pw=

mysqli.reconnect=Off

[mysqlnd]

mysqlnd.collect_statistics=On

MySQL nd.collect _ memory _ statistics=off

[OCI8]

[PostgreSQL]

pgsql.allow_persistent=On

pgsql.auto _ reset _ persistent=off

pgsql.max_persistent=-1

pgsql.max_links=-1

pgsql.ignore_notice=0

pgsql.log_notice=0

[Sybase-CT]

sybct.allow_persistent=On

sybct.max_persistent=-1

sybct.max_links=-1

sybct.min_server_severity=10

sybct.min_client_severity=10

[bcmath]

bcmath.scale=0

[browscap]

[Session]

session.save_handler=files

session.use_strict_mode=0

session.use_cookies=1

session.use_only_cookies=1

session.name=PHPSESSID

session.auto_start=0

session.cookie_lifetime=0

session.cookie_path=/

session.cookie_domain=

session.cookie_httponly=

session.serialize_handler=php

session.gc_probability=1

session.gc_divisor=1000

session.gc_maxlifetime=1440

session.referer_check=

session.cache_limiter=nocache

session.cache_expire=180

session.use_trans_sid=0

session.hash_function=0

session.hash _ bits _ per _ character=5

url_rewriter.tags=a=href,area=href,frame=src,input=src,form=fakeentry

[MSSQL]

mssql.allow_persistent=On

mssql.max_persistent=-1

mssql.max_links=-1

mssql.min_error_severity=10

mssql.min_message_severity=10

mssql.compatibility_mode=Off

mssql.secure_connection=Off

[Assertion]

[COM]

[mbstring]

[gd]

[exif]

[Tidy]

tidy.clean_output=Off

[soap]

soap.wsdl_cache_enabled=1

soap.wsdl_cache_dir=/tmp

soap.wsdl_cache_ttl=86400

soap.wsdl_cache_limit=5

[sysvshm]

[ldap]

ldap.max_links=-1

[mcrypt]

[dba]

[opcache]

[curl]

构建构建PHP镜像

准备好php源包、php.ini和docker文件后,让我们使用docker build构建此镜像。

切换到php目录:

构建php镜像:

[ root @ localhost PHP ] # docker build-tphp:5.6.31。

检查是否成功生成了镜像

3 .运行容器

3.1创建自定义网络lnmp

首先,创建一个在运行ningx、php等容器时加入lnmp网络的自定义网络。

#查看默认网络:

[ root @ localhost PHP ] # dockernetworkls

创建:

[ root @ localhost PHP ] # dockernetworkcreatelnmp

3.2创建PHP容器

创建容器:

[ root @ localhost PHP ] # docker run-itd-- namel NMP _ PHP-- network ln MP-v/app/wwwroot:/usr/local/nginx/htinx/HTP

参数说明:

-itd: #在容器中打开虚拟终端进行交互操作,并在后台执行;

--name: #为容器分配名称lnmp_php;

--network: #为lnmp网络指定容器的网络环境;

--mout: #在容器的/usr/local/nginx/html目录中挂载宿主机上的/app/wwwroot目录。 安装也相当于数据永久化

php:5.6.31: #使用刚才构建的php镜像启动容器;

检查php容器是否正在运行:

3.3创建nginx容器:

创建容器:

[ root @ localhost PHP ] # docker run-itd-- namel NMP _ nginx-- network ln MP-p80:80-v/app/ww root:/usr/local

检查容器是否正在运行:

3.4访问测试

index.html创建并访问静态页面。

[ root @ localhost WordPress ] # echodockerfilelnmptest/app/ww root/index.html

在浏览器中访问宿主机的IP :

创建另一个index.php文件并启动测试:

[root@localhost wordpress]# echo? phpinfo (; /app/wwwroot/index.php

访问PHP页面:

3.5创建MySQL容器:

[ root @ localhost~~ ] # docker run-itd-- network ln MP-p 3306:3306-- name MySQL-e MySQL _ root _ password=123456 mm

#如果本地没有mysql5.6镜像,则会自动从仓库中提取;

检查mysql容器是否已启动:

进入mysql容器并创建wordpress数据库:

确认wordpress是否成功创建:

Ctrl p还会导致Ctrl q退出mysql容器,返回到宿主机

3.6下载WordPress博客系统测试lnmp

将wordpress文件下载到/app/wwwroot目录中

wordpress文件下载地址: https://cn.WordPress.org/WordPress-4.7.4-zh _ cn.tar.gz

解压缩wordpress压缩包并访问测试:

root @ localhost~] # tar-zxvf WordPress-4.7.4-zh _ cn.tar.gz

打开浏览器访问:

http://容器宿主机IP/WordPress/WP-admin/setup-config.PHP

配置wordpress博客:

提交:

输入信息以安装Wordpress :

7 .文件迁移

要将镜像另存为tar文件,请使用docker save命令。

[ root @ localhost~] # dockersavenginx:1.12.2|gzip nginx1. 12.2.tar.gz

使用docker load命令导入:

[ root @ localhost~] # dockerloadnginx.1.12.2.tar.gz

详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3