docker介绍
1.docker介绍
Docker 是一个开源的容器引擎
Docker 可以让开发者打包他们的应用然后发布到另一台机器上
三个基本概念:
仓库:用来保存镜像
镜像:用于创建 Docker 容器的模板
容器:容器是镜像运行时的实体
2.基础命令
操作 | 命令 |
---|---|
安装docker | yum install docker |
查看docker 版本 | docker -v |
启动docker | systemctl start docker |
停止docker | systemctl stop docker |
重启docker | systemctl restart docker |
- 1.镜像操作
操作 | 命令 |
---|---|
拉取镜像 | docker pull 镜像名称:标签eg: docker pull centos:7.9.2009eg: docker pull centos:latest |
查看镜像 | docker image ls |
删除镜像 | docker image rm 镜像名或镜像ID (ID只需输入前4位) |
- 2.容器操作
操作 | 命令 |
---|---|
查看容器 | docker container ls –all docker container lsdocker ps |
删除容器 | docker container rm 容器ID |
启动容器 | docker start 容器ID |
停止容器 | docker stop 容器ID |
查看各个镜像占用的资源 | docker stats |
3.容器运行
docker container run --name [container_name] -it [docker_image] -v 宿主机地址:容器地址 --privileged=true /usr/sbin/init
eg: docker container run --name centos_new -itd -v /home/host_file:/home/container --privileged=true c3c6 /usr/sbin/init
--name [container_name] :为容器指定一个名称
-itd : -i 表示以交互模式运行容器,-t 表示为容器分配一个伪终端,以便你可以与容器的终端进行交互, -d 挂在后台
[docker_image]: 指定要使用的 Docker 镜像的ID
-- privileged=true: 用于指定运行的容器具有特权权限
/usr/sbin/init: 是系统初始化进程,用于启动系统的所有进程和服务端
-v /root/host_file:/home/container :将主机(host)文件系统中的/home/host_file目录挂载到Docker容器内的/home/container目录。这种挂载方式可以让容器与主机之间共享文件,使得容器内的应用程序可以访问主机文件系统中的特定目录或文件。
demo:
docker container run --name centos_test -itd -p 7076:8086 -p 7330:3000 -p 7022:22 -v /home/host_file:/home/container --privileged=true eeb6 /usr/sbin/init
docker run -d -p 8022:80 --name nginx1 --privileged=true a ffff
docker run -d --network=host --name nginx1 --privileged=true ffff
--network=host 将宿主机所有端口映射到容器中
-p 8022:80 端口映射,将容器内部的端口80映射到主机上的端口8022,可以让主机上的服务通过访问主机的8022端口来访问Docker容器内部运行的服务
4.容器操作
进入容器:
dokcer exec -it 容器ID /bin/bash
eg:docker exec -it d30d /bin/bash
退出容器
exit 或 Ctrl + D
# 导出容器
docker export 容器ID > 文件名.tar
eg: docker export 9aa3e4907407 > ./centos.tar
# 导入容器
cat 文件名 | docker import 新的镜像名:TAG的名称
eg:cat centos.tar | sudo docker import - centos1:latest
centos1:latest centos1镜像的名称, latest:TAG的名称
强制删除镜像 + 对应的容器
docker rmi -f 镜像id (有使用该镜像的容器需要处于停止状态)
使用 docker inspect 容器id 命令查看容器的详细信息
5.Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
指令:
FROM :指定基础镜像,Dockerfile开篇第一行代码
COPY:从宿主机复制文件到镜像中
WORKDIR:设置工作目录
ENV:设置镜像中的环境变量
RUN:镜像构建时执行的命令
CMD:为容器设置默认启动命令或参数
推荐文档:Dockerfile详解(超详细) - 简书
# demo
FROM centos:7
ENV WORKDIR /data/release
WORKDIR $WORKDIR
COPY ./data $WORKDIR
RUN yum install python3-devel -y && \
yum install python36 -y && \
pip3 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple/ && \
yum install nginx -y
# 启动 Nginx 服务
COPY ./data/start.sh /etc/kickStart.d/
RUN chmod +x /etc/kickStart.d/start.sh
docker container update --publish-add 9090:8080 <container_name_or_id>
# demo2 运行flask程序
# 拉取镜像
FROM centos:basic
# 创建目录&安装python环境
RUN mkdir /home/main -p && \
yum install python3 net-tools coreutils -y && \
pip3 install flask -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 设置工作目录
ENV MYPATH /home/main
WORKDIR $MYPATH
# 复制脚本
COPY ./demo.py /home/main
COPY ./start.sh /home/main
# 设置权限
RUN chmod 755 /home/main/demo.py && \
chmod 755 /home/main/start.sh
# 启动shell脚本
CMD ["/bin/sh","/home/main/start.sh"]
#####################################
# demo.py 是flask程序
# start.sh 是用来启动demo.py文件的脚本
#!/bin/sh
# 启动Flask程序
nohup python3 /home/main/demo.py > /home/main/log.txt 2>&1 &
# 不让容器挂掉
sleep infinity
6.发布镜像
构建镜像
docker build -t 镜像名称:标签名称 .
eg: docker build -t test_demo:20231015 .
上传一个镜像名称为 test_demo
docker push 镜像名称:标签名称 (需先登录到仓库)
eg: docker push test_demo:20231015
7.镜像源问题
# 拉取镜像时指定镜像源
docker pull docker.m.daocloud.io/library/centos:7
# 可以拉取的仓库
https://github.com/DaoCloud/public-image-mirror/blob/main/mirror.txt
# github地址
https://github.com/DaoCloud/public-image-mirror?tab=readme-ov-file#%E5%8D%95%E6%AC%A1%E5%8D%95%E9%95%9C%E5%83%8F%E5%90%8C%E6%AD%A5
# 查看当前镜像源
cat /etc/docker/daemon.json
# 设置镜像源 (可能没效果)
{
"registry-mirrors": ["https://atomhub.openatom.cn"]
}
# 重启服务
systemctl restart docker
sudo systemctl daemon-reload
sudo systemctl restart docker.service
# 检测是否生效
$ docker info | grep -A 4 Mirrors
# 使用其它镜像源
https://docker.aityp.com/
yum 安装时出现的问题
https://blog.csdn.net/u014142328/article/details/140613003
# 编写一个shell脚本执行以下内容
#! /bin/bash
tee /etc/yum.repos.d/CentOS-Base.repo << 'EOF'
[base]
name=CentOS-$releasever - Base - Aliyun
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates - Aliyun
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - Aliyun
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - Aliyun
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
EOF
yum clean all
yum makecache
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:docker介绍
本文作者:伟生
发布时间:2024-10-19, 15:34:20
最后更新:2025-01-13, 21:29:56
原始链接:http://yoursite.com/2024/10/19/share_19_docker/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。