docker dockerfile docker-compose基础

docker 相关

1、docker 的安装

win:
dockerhub 最下面 找到dockerDesktop 下载
dockerDesktop是包含docker compose

linux:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
或者
curl -sSL https://get.daocloud.io/docker | sh

也可以

wget -O - https://raw.githubusercontent.com/Zo3i/OCS/master/docker/docker-all2.sh | sh

这个是包含docker-compose的

安装好了换源
linux

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://m3dz4myl.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

windows dockerDesktop 设置- Docker Engine

"registry-mirrors": [
    "https://m3dz4myl.mirror.aliyuncs.com"
  ],

manjaro 直接pacman 或者pamac 可视化可以搜索到docker docker-compose(大爱manjaro)

2、docker常用命令

镜像搜索

搜索仓库centos的镜像
docker search centos

--filter=stars=600:只显示 starts>=600 的镜像
docker search --filter=stars=600 centos

--no-trunc 显示镜像完整 DESCRIPTION 描述
docker search --no-trunc centos

镜像下载

下载centos最新镜像
docker pull centos

下载仓库所有centos镜像
docker pull -a centos

镜像查看

列出本地images
docker images

含中间映像层
docker images -a

镜像删除

删除centos镜像(可以删除多个,空格间隔)
docker rmi centos

强制删除
docker rmi -f centos

删除本地所有镜像
docker rmi $(docker images -q)

新建并启动容器

以交互模式新建并启动一个名字为centos_test的centos容器
docker run -it --name centos_test centos

以后台运行的方式新建并启动容器
docker run --it -d --name centos_test centos

启动名字为centos_test的容器
docker start centos_test
restart 重启容器

查看容器

查看正在运行的容器
docker ps
-s 显示容器文件大小
-q 显示容器的ID
-a 显示所有容器

停止和删除容器

停止容器centos_test
docker stop centos_test

杀掉一个容器
docker kill centos_test

删除停止的容器
docker rm centos_test

强制删除容器
docker rm -f centos_test

删除所有容器
docker rm $(docker ps -aq)

进入容器

进入容器
docker exec -it  centos_test bash

Dockerfile
Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以#字符开头则被视为注释。可以在Docker文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令。

FROM:指定基础镜像
示例:
FROM mysql:5.6

MAINTAINER:维护者信息
示例:
MAINTAINER yukai

RUN:在容器中运行命令
示例:
RUN pip install flask -i https://pypi.douban.com/simple/

ADD:将本地文件添加到容器中,tar类型会自动解压,可以访问网络资源
示例:
ADD * /opt/
ADD test.txt /opt

COPY:和ADD类似 不会自动解压 不能访问网络资源

CMD:容器启动时调用的命令
示例:
RUN echo hello word
RUN java -jar test.jar

EXPOSE:指定于外界交互的端口
示例:
EXPOSE 5500
EXPOSE 80 443
EXPOST 8888/tcp 7777/udp

WORKDIR:指定工作目录,指定后Dockerfile的命令都会在该目录下指定,进入容器也会在该目录下
示例:
WORKDIR /opt

Dockerfile 示例

#基础镜像
FROM python
#复制文件
COPY app.py /opt/docker_test/
#执行命令
RUN pip install flask redis -i https://pypi.douban.com/simple/
#设置工作目录
WORKDIR /opt/docker_test
#映射端口
EXPOSE 8666
#启动容器后运行
CMD flask run -h 0.0.0.0 -p 8666

app.py

import redis
from flask import Flask

app = Flask(__name__)

redis = redis.Redis(port=6379, decode_responses=True)
@app.before_first_request
def init():
    try:
        redis.set('name', 'redis')
    except:
        pass

@app.route('/')
def hello_world():
    return 'hello world'


@app.route('/h')
def hello_redis():
    try:
        string=redis.get('name')
    except:
        string='docker'
    return 'hello ' + string


if __name__ == '__main__':
    app.run()


在Dockerfile所在路径运行

docker build -t flask .

docker images 可以看到flask镜像

执行
docker run -itd --name flask -p 8666:8666 flask

访问IP:8666 可以看到hello word
访问IP:8666/h 可以看到hello docker

docker-compose
通过一个单独的docker-compose.yml模板文件,来定义一组相关联的应用容器为一个项目

docker-compose.yml示例

version: '2'
services:
  redis:
    image: redis
    container_name: redis
    network_mode: host
    ports:
      - 6379
  web:
    #从当前的Dockerfile制作镜像
    build: .
    #容器名
    container_name: flask
    network_mode: host
    #依赖于redis 防止redis在web后启动
    depends_on:
      - redis
    ports:
      - 8666


执行
docker-compose up -d

这时就启动了flask容器和redis的容器
访问IP:8666 可以看到hello word
访问IP:8666/h 可以看到hello redis

demo地址

中途遇到的坑:
docker-compose.yml定义的 network_mode: host
win本机访问不到 最后发现docker-desktop使用了wsl2
wsl2使用的是虚拟机 物理机无法访问wsl2
使用linux一切正常

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值