Docker入门(基于CentOS7)

Docker入门(基于CentOS7)

官方安装说明文档:https://docs.docker.com/engine/install/centos/

一、使用存储库安装

1.1设置存储库

安装yum-utils软件包(提供yum-config-manager 实用程序)并设置稳定的存储库。

yum install -y yum-utils
yum-config-manager  --add-repo https://download.docker.com/linux/centos/docker-ce.repo

在这里插入图片描述
在这里插入图片描述

1.2 安装DOCKER引擎

Step1.安装最新版本的Docker Engine和容器,或转到下一步以安装特定版本:

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

在这里插入图片描述

在这里插入图片描述

Step2.启动Docker

systemctl start docker

在这里插入图片描述

使用ifconfig命令,会查看到多出来一张虚拟网卡,如下图所示

在这里插入图片描述

二、启用Web服务

2.1 查找httpd镜像

docker search httpd

在这里插入图片描述

2.2 下载httpd镜像

docker pull httpd

在容器中,启动服务基本上是基于镜像的。

在这里插入图片描述

2.3查看当前本地镜像

docker images

在这里插入图片描述

2.4启动web服务

docker run -it -d -p 80:80 --name web80 httpd
模板:docker run -it -d -p port:port --name [自定义名字] [基于何种服务]

参数解释:-it:交互式的 -d:到后台 -p:暴露到端口

冒号前面的80是用户访问的,后面的80是镜像服务启动的默认端口

–name起名,若没有起名,系统会自动起一个名字。

在这里插入图片描述

这种情况说明80端口被占用,冒号前面的80应该修改为其他端口,比如82.

在这里插入图片描述

这种情况说明web80名字刚刚被上面的操作占用了,我们把web80修改为web81.

在这里插入图片描述

这种情况表明httpd服务已经启动,暴露端口号为82,名称为web81.

**使用浏览器访问docker容器所在的计算机对应的ip地址,并输入端口号82,如能成功显示下图所示的页面,说明httpd服务成功运行。
在这里插入图片描述

我们再来再来启动一个httpd服务试试看吧!

设定暴露端口号为83,名称为83.

docker run -it -d -p 83:80 --name web83 httpd

在这里插入图片描述

如您能看到下图所示的测试页面,则说明httpd服务启动正常。

在这里插入图片描述

三、常用的docker命令

3.1查看启动了哪些容器

docker ps -a

在这里插入图片描述

3.2查看一个具体的容器

docker exec -it web81 /bin/bash
模板:docker exec -it name /bin/bash

在这里插入图片描述

进去之后可以执行一些简单的命令,但不能执行shell命令,比如vim(vi)命令。

在这里插入图片描述

在这里插入图片描述

查看效果

在这里插入图片描述

3.3删除容器

Step1.在删除容器之前,先停止容器:

docker stop web80

在这里插入图片描述

Step2.查看web80的状态:

docker ps -a

在这里插入图片描述

Step3.删除web80:

docker rm web80

在这里插入图片描述

3.4 开启容器与关闭容器

3.4.1开启容器(以web81为例):
docker start web81

在这里插入图片描述

3.4.2关闭容器(以web81为例):
docker stop web81

在这里插入图片描述

四、页面版的docker镜像仓库

网页链接:http://hub.docker.com/

在这里插入图片描述

直接搜索需要查找的镜像名称即可,不需要注册账号。

在这里插入图片描述

在这里插入图片描述

可以看到,上图红框所示的是我们刚刚通过docker search httpd命令查找到的官方httpd镜像。

在这里插入图片描述

点进来之后,网页会提示通过什么命令来下载httpd镜像。

在这里插入图片描述

如何下载一个2.4.46版本的httpd镜像呢?

docker pull httpd:2.4.46

在这里插入图片描述

查看现有的docker镜像:

docker images

在这里插入图片描述

这些镜像存放在了容器里面

五、数据的持久化

数据持久化的目的:为了把数据放在容器外面,而不是存储在容器内部。因为一旦容器被删除,数据也会跟着消失。

在这里插入图片描述

共享可以通过NFS服务实现。

在这里插入图片描述

-v参数可以把容器里面的目录和容器外面的目录进行映射。

/usr/local/apache2/htdocs/  是容器里面的目录

Step1.在根目录下创建目录

mkdir /web82

Step2.创建一个html文件

vi /web82/index.html

在这里插入图片描述
在这里插入图片描述

wq保存退出

Step3.映射文件到web服务器

docker run -it -d -p 82:80 --name web82 -v /web82:/usr/local/apache2/htdocs/ httpd
模板:docker run -it -d -p 82:80 --name [自定义名称] -v /[本地目录]:[容器目录] [使用何种服务]

在这里插入图片描述

查看效果,如下图

在这里插入图片描述

如果index.html的内容发生更改,只要直接刷新浏览器就可以看到最新的index页面。

vi /web82/index.html

在这里插入图片描述
在这里插入图片描述

查看Dockfile的语法:

在这里插入图片描述

***链接:***https://github.com/docker-library/httpd/blob/077141ee37fca63972292c562ec0f632d0f831b1/2.4/Dockerfile

参数解释:FROM debian:buster-slim 基于debian镜像

ENV:设置环境变量

RUN:运行命令

WORKDIR:工作目录

STOPSIGNAL:停止信号

EXPOSE:暴露的端口

CMD:容器启动的时候执行的命令

FROM debian:buster-slim

# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
#RUN groupadd -r www-data && useradd -r --create-home -g www-data www-data

ENV HTTPD_PREFIX /usr/local/apache2
ENV PATH $HTTPD_PREFIX/bin:$PATH
RUN mkdir -p "$HTTPD_PREFIX" \
	&& chown www-data:www-data "$HTTPD_PREFIX"
WORKDIR $HTTPD_PREFIX

# install httpd runtime dependencies
# https://httpd.apache.org/docs/2.4/install.html#requirements
RUN set -eux; \
	apt-get update; \
	apt-get install -y --no-install-recommends \
		libaprutil1-ldap \
	; \
	rm -rf /var/lib/apt/lists/*

ENV HTTPD_VERSION 2.4.46
ENV HTTPD_SHA256 740eddf6e1c641992b22359cabc66e6325868c3c5e2e3f98faf349b61ecf41ea

# https://httpd.apache.org/security/vulnerabilities_24.html
ENV HTTPD_PATCHES=""

# see https://httpd.apache.org/docs/2.4/install.html#requirements
RUN set -eux; \
	\
	# mod_http2 mod_lua mod_proxy_html mod_xml2enc
	# https://anonscm.debian.org/cgit/pkg-apache/apache2.git/tree/debian/control?id=adb6f181257af28ee67af15fc49d2699a0080d4c
	savedAptMark="$(apt-mark showmanual)"; \
	apt-get update; \
	apt-get install -y --no-install-recommends \
		bzip2 \
		ca-certificates \
		dirmngr \
		dpkg-dev \
		gcc \
		gnupg \
		libapr1-dev \
		libaprutil1-dev \
		libbrotli-dev \
		libcurl4-openssl-dev \
		libjansson-dev \
		liblua5.2-dev \
		libnghttp2-dev \
		libpcre3-dev \
		libssl-dev \
		libxml2-dev \
		make \
		wget \
		zlib1g-dev \
	; \
	rm -r /var/lib/apt/lists/*; \
	\
	ddist() { \
		local f="$1"; shift; \
		local distFile="$1"; shift; \
		local success=; \
		local distUrl=; \
		for distUrl in \
# https://issues.apache.org/jira/browse/INFRA-8753?focusedCommentId=14735394#comment-14735394
			'https://www.apache.org/dyn/closer.cgi?action=download&filename=' \
# if the version is outdated (or we're grabbing the .asc file), we might have to pull from the dist/archive :/
			https://www-us.apache.org/dist/ \
			https://www.apache.org/dist/ \
			https://archive.apache.org/dist/ \
		; do \
			if wget -O "$f" "$distUrl$distFile" && [ -s "$f" ]; then \
				success=1; \
				break; \
			fi; \
		done; \
		[ -n "$success" ]; \
	}; \
	\
	ddist 'httpd.tar.bz2' "httpd/httpd-$HTTPD_VERSION.tar.bz2"; \
	echo "$HTTPD_SHA256 *httpd.tar.bz2" | sha256sum -c -; \
	\
# see https://httpd.apache.org/download.cgi#verify
	ddist 'httpd.tar.bz2.asc' "httpd/httpd-$HTTPD_VERSION.tar.bz2.asc"; \
	export GNUPGHOME="$(mktemp -d)"; \
# $ docker run --rm buildpack-deps:buster-curl bash -c 'wget -qO- https://downloads.apache.org/httpd/KEYS | gpg --batch --import &> /dev/null && gpg --batch --list-keys --with-fingerprint --with-colons' | awk -F: '$1 == "pub" && $2 == "-" { pub = 1 } pub && $1 == "fpr" { fpr = $10 } $1 == "sub" { pub = 0 } pub && fpr && $1 == "uid" && $2 == "-" { print "#", $10; print "\t\t" fpr " \\"; pub = 0 }'
	for key in \
# Rodent of Unusual Size (DSA) <coar@ACM.Org>
		DE29FB3971E71543FD2DC049508EAEC5302DA568 \
# Rodent of Unusual Size <coar@ACM.Org>
		13155B0E9E634F42BF6C163FDDBA64BA2C312D2F \
# Jim Jagielski <jim@apache.org>
		8B39757B1D8A994DF2433ED58B3A601F08C975E5 \
# Dean Gaudet <dgaudet@apache.org>
		31EE1A81B8D066548156D37B7D6DBFD1F08E012A \
# Cliff Woolley <jwoolley@apache.org>
		A10208FEC3152DD7C0C9B59B361522D782AB7BD1 \
# Cliff Woolley <jwoolley@virginia.edu>
		3DE024AFDA7A4B15CB6C14410F81AA8AB0D5F771 \
# Graham Leggett <minfrin@apache.org>
		EB138C6AF0FC691001B16D93344A844D751D7F27 \
# Roy T. Fielding <fielding@gbiv.com>
		CBA5A7C21EC143314C41393E5B968010E04F9A89 \
# Justin R. Erenkrantz <jerenkrantz@apache.org>
		3C016F2B764621BB549C66B516A96495E2226795 \
# Aaron Bannert <abannert@kuci.org>
		937FB3994A242BA9BF49E93021454AF0CC8B0F7E \
# Brad Nicholes <bnicholes@novell.com>
		EAD1359A4C0F2D37472AAF28F55DF0293A4E7AC9 \
# Sander Striker <striker@apache.org>
		4C1EADADB4EF5007579C919C6635B6C0DE885DD3 \
# Greg Stein <gstein@lyra.org>
		01E475360FCCF1D0F24B9D145D414AE1E005C9CB \
# Andre Malo <nd@apache.org>
		92CCEF0AA7DD46AC3A0F498BCA6939748103A37E \
# Erik Abele <erik@codefaktor.de>
		D395C7573A68B9796D38C258153FA0CD75A67692 \
# Astrid Kessler (Kess) <kess@kess-net.de>
		FA39B617B61493FD283503E7EED1EA392261D073 \
# Joe Schaefer <joe@sunstarsys.com>
		984FB3350C1D5C7A3282255BB31B213D208F5064 \
# Stas Bekman <stas@stason.org>
		FE7A49DAA875E890B4167F76CCB2EB46E76CF6D0 \
# Paul Querna <chip@force-elite.com>
		39F6691A0ECF0C50E8BB849CF78875F642721F00 \
# Colm MacCarthaigh <colm.maccarthaigh@heanet.ie>
		29A2BA848177B73878277FA475CAA2A3F39B3750 \
# Ruediger Pluem <rpluem@apache.org>
		120A8667241AEDD4A78B46104C042818311A3DE5 \
# Nick Kew <nick@webthing.com>
		453510BDA6C5855624E009236D0BC73A40581837 \
# Philip M. Gollucci <pgollucci@p6m7g8.com>
		0DE5C55C6BF3B2352DABB89E13249B4FEC88A0BF \
# Bojan Smojver <bojan@rexursive.com>
		7CDBED100806552182F98844E8E7E00B4DAA1988 \
# Issac Goldstand <margol@beamartyr.net>
		A8BA9617EF3BCCAC3B29B869EDB105896F9522D8 \
# "Guenter Knauf" ("CODE SIGNING KEY") <fuankg@apache.org>
		3E6AC004854F3A7F03566B592FF06894E55B0D0E \
# Jeff Trawick (CODE SIGNING KEY) <trawick@apache.org>
		5B5181C2C0AB13E59DA3F7A3EC582EB639FF092C \
# Jim Jagielski (Release Signing Key) <jim@apache.org>
		A93D62ECC3C8EA12DB220EC934EA76E6791485A8 \
# Eric Covener <covener@apache.org>
		65B2D44FE74BD5E3DE3AC3F082781DE46D5954FA \
# Yann Ylavic <ylavic@apache.org>
		8935926745E1CE7E3ED748F6EC99EE267EB5F61A \
# Daniel Ruggeri (http\x3a//home.apache.org/~druggeri/) <druggeri@apache.org>
		B9E8213AEFB861AF35A41F2C995E35221AD84DFF \
# Daniel Ruggeri (http\x3a//home.apache.org/~druggeri/) <druggeri@apache.org>
		E3480043595621FE56105F112AB12A7ADC55C003 \
# Joe Orton (Release Signing Key) <jorton@apache.org>
		93525CFCF6FDFFB3FD9700DD5A4B10AE43B56A27 \
	; do \
		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
	done; \
	gpg --batch --verify httpd.tar.bz2.asc httpd.tar.bz2; \
	command -v gpgconf && gpgconf --kill all || :; \
	rm -rf "$GNUPGHOME" httpd.tar.bz2.asc; \
	\
	mkdir -p src; \
	tar -xf httpd.tar.bz2 -C src --strip-components=1; \
	rm httpd.tar.bz2; \
	cd src; \
	\
	patches() { \
		while [ "$#" -gt 0 ]; do \
			local patchFile="$1"; shift; \
			local patchSha256="$1"; shift; \
			ddist "$patchFile" "httpd/patches/apply_to_$HTTPD_VERSION/$patchFile"; \
			echo "$patchSha256 *$patchFile" | sha256sum -c -; \
			patch -p0 < "$patchFile"; \
			rm -f "$patchFile"; \
		done; \
	}; \
	patches $HTTPD_PATCHES; \
	\
	gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \
	CFLAGS="$(dpkg-buildflags --get CFLAGS)"; \
	CPPFLAGS="$(dpkg-buildflags --get CPPFLAGS)"; \
	LDFLAGS="$(dpkg-buildflags --get LDFLAGS)"; \
	./configure \
		--build="$gnuArch" \
		--prefix="$HTTPD_PREFIX" \
		--enable-mods-shared=reallyall \
		--enable-mpms-shared=all \
# enable the same hardening flags as Debian
# - https://salsa.debian.org/apache-team/apache2/blob/87db7de4e59683fb03e97900f078d06ef2292748/debian/rules#L19-21
# - https://salsa.debian.org/apache-team/apache2/blob/87db7de4e59683fb03e97900f078d06ef2292748/debian/rules#L115
		--enable-pie \
		CFLAGS="-pipe $CFLAGS" \
		CPPFLAGS="$CPPFLAGS" \
		LDFLAGS="-Wl,--as-needed $LDFLAGS" \
	; \
	make -j "$(nproc)"; \
	make install; \
	\
	cd ..; \
	rm -r src man manual; \
	\
	sed -ri \
		-e 's!^(\s*CustomLog)\s+\S+!\1 /proc/self/fd/1!g' \
		-e 's!^(\s*ErrorLog)\s+\S+!\1 /proc/self/fd/2!g' \
		-e 's!^(\s*TransferLog)\s+\S+!\1 /proc/self/fd/1!g' \
		"$HTTPD_PREFIX/conf/httpd.conf" \
		"$HTTPD_PREFIX/conf/extra/httpd-ssl.conf" \
	; \
	\
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
	apt-mark auto '.*' > /dev/null; \
	[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
	find /usr/local -type f -executable -exec ldd '{}' ';' \
		| awk '/=>/ { print $(NF-1) }' \
		| sort -u \
		| xargs -r dpkg-query --search \
		| cut -d: -f1 \
		| sort -u \
		| xargs -r apt-mark manual \
	; \
	apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
	\
# smoke test
	httpd -v

# https://httpd.apache.org/docs/2.4/stopping.html#gracefulstop
STOPSIGNAL SIGWINCH

COPY httpd-foreground /usr/local/bin/

EXPOSE 80
CMD ["httpd-foreground"]

六、集群技术

swam(docker官方提供,比较简单)

k8s(kubernetes):谷歌开源出来的,功能比较强大

yaml语言

七、扩展内容

7.1查看IP表

iptables -L -n

在这里插入图片描述

这就是为什么启动完成容器后,什么都没做就可以访问那个容器。

7.2查看NAT转换

iptables -t nat -L -n

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JoebeeTang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值