初试docker
cenos必须是7版本以上
查看命令:
cat /etc/redhat-release
安装docker
yum install docker -y
镜像加速
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io
如果出现问题添加以下配置文件
vim /etc/sysconfig/docker-storage
DOCKER_STORAGE_OPTIONS="--selinux-enabled --log-driver=journald --signature-verification=false"
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://geg16nbp.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
service docker start#启动docker服务
增命令
#在dockerhub搜索关于centos的镜像
docker search centos
#下载centos镜像到服务器上
docker pull centos
#运行nginx镜像,nginx服务器就能够运行在容器中,然后和宿主机有一个端口映射,就可以访问了
docker run nginx
删命令
#删除本地镜像
docker rmi 镜像id
#删除容器记录的命令 -如果运行了容器,是删除不了镜像的需要先把容器记录删除先,如果没有在运行的程序,容器记录会挂掉变成隐藏信息
docker rm 容器id前3位
#批量清空无用的docker容器记录,容器记录非常容易创建docke run
#批量删除挂掉的容器记录
docker rm `docker ps -aq` # 把docker容器记录的id号,保存在反引号中,丢给docker rm实现批量删除
#批量删除镜像
docker rmi `docker iamges -aq`
#批量停止容器
docker stop `docker ps -aq`
docker start 容器id #启动暂停的容器
docker stop 容器id #暂停一个容器
docker restart 容器id #重启容器
改命令
#运行第一个docker的容器实例,运行镜像文件,产生容器进程
docker run 镜像文件的名字即可
docker run centos #运行centos基础镜像,如果docker容器中没有在后台运行的进程,容器会直接挂掉
docker run指令还有一个功能是,当镜像不存在的时候,会自动去下载该进程
交互式的运行一个存活的docker容器,centos
# -it参数 -i 是交互式的命令操作 -t开启一个终端 /bin/bash 指定shell解释器
# 容器空间内,有自己的文件系统
docker run -it centos /bin/bash #运行centos镜像,且进入容器内
[root@localhost ~]# docker run -it centos /bin/bash #进入容器后,容器空间内是以容器id命名的
[root@0fadedda5b0c /]#
运行出一个活着的容器,在后台不断执行程序的容器
# docker run 运行镜像文件
# -d 是让容器后台运行
# -c 指定一段shell代码
# 运行centos镜像,生成容器实例,且有一段shell代码,在后台不断运行,死循环打印一句话,每秒钟打印一次,此容器不会挂掉
docker run -d centos /bin/sh -c "while true;do echo 学习linux; sleep 1;done"
#进入一个正在运行的容器空间,进入一个线上正在运行的容器程序(已经挂掉的不行),修改其内部的资料
docker exec -it 容器id /bin/bash
#进入一个挂掉的容器,如果启动是不允许进入的
docker restart 容器名字
docker attach 容器名字
docker exec -it 198 /bin/bash
#修改容器名字,原有名称 修改名称
docker rename master slave2

#如何进入容器空间内,修改容器内的环境,以及代码等内容,修改软件等操作,且提交镜像,发送给其他人
1、进入容器空间
docker run -it centos /bin/bash
2、安装测试内容
yum install vim -y
3、提交该容器,生成新的镜像文件
docker commit 5b28d8c88794 centos-vim
4、将镜像打包生成压缩包
docker save 2bd > /opt/centos-vim.tar.gz
5、发送文件到另一台服务器
scp 文件名 用户名@计算机ip:远程路径
scp /root/install.* root@192.168.1.12:/usr/local/src
6、导入镜像文件(tar.gz)
docker load < /opt/centos-vim.tar.gz
7、修改镜像名称(名称中不能含有大写字母)
docker tag 2bd6ceac7ded centos-vim-load
查命令
#查看本地机器,所有的镜像文件内容
docker images
#查看docker正在运行的进程
docker ps
#查看所有运行,以及挂掉的容器进程
docker ps -a
#查看容器内的运行日志
docker logs 容器id
docker logs -f 容器id #实时刷新容器内的日志,例如检测nginx等日志信息
#查看容器内的端口转发情况
docker port 容器id #查看容器的端口转发
5000/tcp -> 0.0.0.0:6000 容器5000 主机6000
运行python web程序
如何在docker内,运行一个python web的程序,需要用到端口映射知识~~~~
# -d 后台运行
# -P 大写的P参数,作用是随机的端口映射
# training/webapp 是镜像的名字,默认没有会去在线下载
# python app.py 代表启动容器后,让容器执行的命令是它
# 因此这个命令作用是,启动一个webapp镜像,且在容器中执行 python app.py
# -p 6000:5000 访问宿主机的6000,就是访问容器的5000了
docker run --name "webdocker" -d -p 6000:5000 training/webapp python app.py
#如果修改容器里面的东西需要重启后才可生效
dockerhub
1.docker提供了一个类似于github的仓库dockerhub,
网址https://hub.docker.com/需要注册使用
2.注册docker id后,在linux中登录dockerhub,会提示让你输入账号密码,正确登录之后,本台机器就和dockerhub绑定账号了,你的镜像推送,就能够推送到,该账户的dockerhub中
docker login
2.1准备镜像推送
注意要保证image的tag是dockerhub账户名,如果镜像名字不对,需要改一下tag
docker tag 镜像id dockerhub的账号/centos-vim
语法是: docker tag 仓库名 yuchao163/仓库名
3.推送docker image到dockerhub,好比你准备git push 推送代码一样
docker push dockerhub账号/centos-vim
4.在dockerhub中检查镜像,查看个人账户中的镜像文件
https://hub.docker.com/
5.删除本地镜像,测试下载pull 镜像文件
docker pull yuchao163/centos-vim
dockfile
# FROM 指令表示,告诉该dockerfile以哪个镜像为基础
# 比如你的技术老大,要求你们程序运行在ubuntu中
# FROM ubuntu
# FROM centos
FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image
FROM centos #使用base image
FROM ubuntu:14.04 #带有tag的base image
#LABEL标签,定义变量,定义坐着信息等
LABEL version=“1.0” #容器元信息,帮助信息,Metadata,类似于代码注释
LABEL maintainer=“yc_uuu@163.com"
#RUN是一个完成指令,你可以用它在docker中执行任意的命令
# RUN就是告诉容器要做哪些配置
# 用RUN指令告诉dockerfile他该去做什么事
RUN mkdir /test
#对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!
# 要修改centos基础镜像的环境问题
RUN yum update && yum install -y vim \
Python-dev #反斜线换行
RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME”
WORKDIR /root #相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd
WORKDIR /test #如果没有就自动创建
WORKDIR demo #再进入demo文件夹
RUN pwd #打印结果应该是/test/demo
# ADD指令用于添加宿主机的文件,放入到容器空间内
# 宿主机有自己的文件系统,文件夹,文件,目录等
# 容器内也有一套自己的文件系统,独立的文件信息
# 把宿主机的代码,拷贝到容器内
# ADD还有解压缩的功能,这是一个坑,需要注意
ADD and COPY
ADD hello.txt /opt #吧宿主机的hello.txt 拷贝到容器内的/opt目录下
ADD test.tar.gz /opt /opt/test
RUN tar -zxvf test.tar.gz #直接报错,文件不存在 ,因为上一步,ADD指令已经对tar.gz压缩包解压缩了
WORKDIR /root
ADD hello test/ #进入/root/ 添加hello可执行命令到test目录下,也就是/root/test/hello 一个绝对路径
COPY hello test/ #等同于上述ADD效果
# dockerfile,用于从宿主机拷贝文件,到容器内有2个指令一个ADD,一个COPY,COPY仅仅就是拷贝,尽量用它
ADD与COPY
- 优先使用COPY命令
-ADD除了COPY功能还有解压功能
#添加远程文件/目录使用curl或wget
ENV #环境变量,尽可能使用ENV增加可维护性
ENV MYSQL_VERSION 8.0
RUN yum install -y mysql-server=“${MYSQL_VERSION}”
dockerfile 写flask脚本
#1.准备好一个flask代码,检查需要哪些依赖步骤
[root@s25linux s25docker]# cat s25_flask.py
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello():
return "linux就即将结束了,祝大家,找到好工作,有linux问题呢,尽量和我来沟通,互相学习"
if __name__=="__main__":
app.run(host='0.0.0.0',port=8080)
#2.在宿主机环境检查如何能够运行该脚本
发现需要安装flask模块
pip3 install -i https://pypi.douban.com/simple flask
#3.编写dockerfile脚本,注意名字必须是 大写Dockerfile
touch Dockerfile ,写入如下的内容
FROM python #指定镜像,dockerhub提供好的python镜像,已经安装好了python3,很好用
RUN pip3 install -i https://pypi.douban.com/simple flask #在容器内安装flask模块
ADD flask_test.py /opt #把宿主机的代码,拷贝到容器的/opt目录下
WORKDIR /opt #容器内进行目录切换
EXPOSE 8080 #打开容器的8080端口,用于和宿主机进行映射
CMD ["python3","flask_test.py"] #在容器启动后,内部自动执行的命令是什么
#注意每个关键字必须有空白格隔开
#4.检查准备的脚本代码,以及Dockerfile文件
[root@localhost test]# ls
Dockerfile flask_test.py
#5.构建该dockerfile,生成镜像
[root@localhost test]# docker build .
#6.检查docker的镜像,是否生成
docker images
#可以修改一下镜像的标签
[root@localhost test]# docker tag a66 flask
#7.运行该镜像文件,查看是否能够运行容器内的flask
docker run -d -p 8000:8080 a66
#8.访问宿主机端口,查看容器内的应用
curl 127.0.0.1:8000
#9.可以修改容器内的代码,重启容器
docker exec -it 88a5 /bin/bash
#修改容器内的代码
sed -i "s/dockfileTest/dockfileTest~~~~666/" flask_test.py
#10.重启容器
docker restart 88a
#11.再次访问容器内应用,查看更新的代码内容
curl 127.0.0.1:8000
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下