Linux初学(十七)docker

一、docker

1.1 简介

容器技术

容器其实就是虚拟机,每个容器可以运行不同的系统【系统以Linux为主的】

为什么要使用docker?

  • docker容器之间互相隔离,可以提高安全性
  • 通过使用docker可以做靶场

1.2 安装配置docker

方法一:yum安装

方法二:编译安装

第一步:配置yum源

需要三个源

  • BASE   基本源
  • EXTRA   额外软件包源
  • UPDATA   升级软件包源

[root@localhost yum.repos.d]# vim qinghua.repo
[base]
name=base
enabled=1
gpgcheck=0
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/os/x86_64/

[extra]
name=extra
enable=1
gpgcheck=0
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/extras/x86_64/

[update]
name=update
enabled=1
gpgcheck=0
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/updates/x86_64/

[epel]
name=epel
enabled=1
gpgcheck=0
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7Server/x86_64/

第二步:检查yum源是否配置成功

yum clean all
yum repolist

第二步:安装docker的依赖环境

yum install -y yum-utils device-mapper-persistent-data lvm2

第三步:设置yum源,并更新 yum 的包索引

#在 CentOS 系统中添加阿里云的 Docker CE 仓库。执行该命令后,系统将从阿里云镜像站点下载并安装 Docker CE 软件包
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#快速更新 YUM 缓存
yum makecache fast

第四步:安装docker

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

第五步:启动并加入开机启动

systemctl start docker
systemctl enable docker

第六步:验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

[root@localhost yum.repos.d]# docker version
Client: Docker Engine - Community
 Version:           26.0.0
 API version:       1.45
 Go version:        go1.21.8
 Git commit:        2ae903e
 Built:             Wed Mar 20 15:21:09 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.0.0
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.8
  Git commit:       8b79278
  Built:            Wed Mar 20 15:20:06 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.28
  GitCommit:        ae07eda36dd25f8a1b98dfbf587313b99c0190bb
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

1.3 管理和使用docker

1.3.1 管理服务
systemctl start docker        # 启动docker服务
systemctl stop docker         # 关闭docker服务
systemctl enable docker       # 设置开机自启动
systemctl disable docker      # 取消开机自启动

docker info                   # 显示docker的详细信息

注意:关于防火墙

使用docker需要注意iptables防火墙

建议:

  • 关闭firewalld
  • 启动iptables

具体操作命令:

yum install iptables-services -y

systemctl stop firewalld
systemctl disable firewalld

systemctl start iptables
systemctl enableiptables

注意:关闭selinux

setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
1.3.2 配置镜像加速

启动docker容器,需要用docker镜像【docker镜像就是一个操作系统】

默认docker镜像都是在国外,访问速度特别慢,所以需要配置加速

vi /etc/docker/daemon.json
{
    "registry-mirrors": ["https://mzxx8xy8.mirror.aliyuncs.com"]
}



systemctl daemon-reload
systemctl restart docker

1.4 管理镜像

1.4.1 下载镜像
docker pull 镜像名:版本

案例:

1、下载centos7的镜像
docker pull centos:7

2、下载nginx的镜像
docker pull nginx

3、下载busyboy镜像

docker pull busybox

1.4.2 查看镜像
docker images                     # 列出本地所有的镜像。
docker search <image_name>        # 在Docker Hub中搜索指定的镜像。
1.4.3 删除操作
docker rm <container_id>            # 删除一个已停止的容器。
docker rmi <image_id>               # 删除一个本地的镜像(只有在没有任何容器使用该镜像时才能删除)
docker rm -f <container_id>         # 强制删除,用来删除正在运行的容器
1.4.4 控制容器
docker start <container_id>            # 启动一个已停止的容器。
docker stop <container_id>             # 停止一个正在运行的容器。
docker restart <container_id>          # 重启一个容器
1.4.5 其他常用命令
docker build                      # 用于构建Docker镜像。
docker login                      # 登录到Docker Hub或其他私有仓库。
docker logs <container_id>        # 查看容器的日志输出。

1.5 容器管理

1.5.1 查看容器
docker ps               # 列出当前正在运行的容器
docker ps -a            # 列出所有容器,包括正在运行的和已停止的。
1.5.2 启动容器
docker run
  • -t:这里是指定一个终端,如果没有终端,是无法登录这个容器的
  • -i,--interactive:如果想用交互式访问,就需要这个选项
  • --name string:这里指定容器的名字
  • --rm:当容器停止的时候,自动删除容器对象
  • -d,--detach:让当前的这个容器工作在后台
  • --network string:指定容器加入到那个网络,如果不加的话,默认是一个bridge网络
  • -P:暴露容器的端口,将容器中的端口和宿主机的任意端口进行端口映射
  • -p 宿主机的端口:容器的端口      可以将宿主机的指定端口和容器的端口进行映射
  • -v:逻辑卷
1.5.3 删除容器
docker rm -f 容器名/容器ID
1.5.4 关闭所有容器
docker rm -f `docker ps -a | awk 'NR>=2{print $1}'`

1.6 dockerfile

1.6.1 简介

dockerfile 是一个脚本文件

通过这个脚步文件可以快速做新的镜像

在dockfile中包含了各种关键字

1.6.2 dockerfile 关键字

FROM 指定基础镜像

RUN 在基础镜像中执行的命令

ADD 将宿主机的文件发送到docker容器中

  • 如果ADD发送的文件是一个tar.gz的包,那么ADD会自动进行解压

COPY:将宿主机中的一个文件复制到容器中

EXPORT:将容器的端口暴露出去

ENTRYPOINT:在容器中去执行一个shell脚本

# 指定镜像
FROM centos:7

# 执行命令安装编译库文件
RUN yum install -y gcc gcc-c++ make openssl-devel zlib-devel ncurses-devel iproute

# 安装php环境
RUN yum  install epel-release -y

# 添加解压nginx包到/tmp目录下
ADD nginx-1.18.0.tar.gz /tmp

# 进入目录进行编译安装
RUN cd /tmp/nginx-1.18.0 && ./configure --prefix=/usr/local/nginx && make -j 2 && make install

# 删除容器内置配置文件
RUN rm -f /usr/local/nginx/conf/nginx.conf

# 复制本地配置文件到容器
COPY nginx.conf /usr/local/nginx/conf

# 复制启动脚本
COPY run.sh /tmp
RUN cd /tmp
RUN chmod +x /tmp/run.sh

# 复制web代码到容器
COPY s.html /usr/local/nginx/html/

# 声明暴露端口
EXPOSE 80

# 启动容器nginx服务,指定全局命令daemon off保证服务在前台运行不会关闭
ENTRYPOINT ["/tmp/run.sh"]

案例:用centos作为基础镜像,安装上nginx

第一步:先准备一个目录

第二步:在目录中创建dockerfile文件

# 指定镜像
FROM centos:7

# 执行命令安装编译库文件
RUN yum install -y gcc gcc-c++ make openssl-devel zlib-devel ncurses-devel iproute

# 安装php环境
RUN yum  install epel-release -y

# 添加解压nginx包到/tmp目录下
ADD nginx-1.18.0.tar.gz /tmp

# 进入目录进行编译安装
RUN cd /tmp/nginx-1.18.0 && ./configure --prefix=/usr/local/nginx && make -j 2 && make install

# 删除容器内置配置文件
RUN rm -f /usr/local/nginx/conf/nginx.conf

# 复制本地配置文件到容器
COPY nginx.conf /usr/local/nginx/conf

# 复制启动脚本
COPY run.sh /tmp
RUN cd /tmp
RUN chmod +x /tmp/run.sh

# 复制web代码到容器
COPY s.html /usr/local/nginx/html/

# 声明暴露端口
EXPOSE 80

# 启动容器nginx服务,指定全局命令daemon off保证服务在前台运行不会关闭
ENTRYPOINT ["/tmp/run.sh"]

第三步:根据dockerfile中的内容,去逐一准备文件

  • nginx-1.18.0.tar.gz
  • nginx.conf
  • run.sh
  • s.html
  • 链接:https://pan.baidu.com/s/1LIZleafIAcB7HNmkFkbG_Q?pwd=d25l 
  • 提取码:d25l

第四步:创建镜像文件

docker build -t 镜像名 .

第五步:用自己的镜像启动容器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ys52IT

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

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

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

打赏作者

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

抵扣说明:

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

余额充值