初试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
![](https://img2022.cnblogs.com/blog/2873649/202205/2873649-20220518144711519-788864714.png)



#如何进入容器空间内,修改容器内的环境,以及代码等内容,修改软件等操作,且提交镜像,发送给其他人
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
posted @   starSgz  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示