Docker使用实战-Docker镜像容器操作及Docker间关联的简单Demo

一:Docker在线安装

官方文档
https://docs.docker.com/ 

docker --version


镜像仓库
https://hub.docker.com 
https://dev.aliyun.com // 国内阿里云镜像仓库 -- 一般需要配置


操作命令

1镜像操作
查看有哪些镜像
docker images  == docker image ls
拉取镜像
docker pull    == docker image pull
删除镜像
docker image rm (镜像名称)  == docker imi (镜像名称)

2容器操作

运行容器
docker container(可省略) run 镜像名 执行的命令 
后台运行容器
docker run -d 镜像名 命令
运行容器,当容器中命令执行完成后自动删除--注意,删除后,生成的数据也会被删除
docker run --rm 镜像名 命令
停止容器
docker stop 容器ID

查看容器
docker ps -a == docker container ls -a(程序运行完后,默认结束-停止,需要 -a 才可查看)
删除容器
docker container rm (容器的ID)
杀死运行中的容器
docker kill 容器ID
查看所有容器ID
docker ps -q
杀死所有容器
docker kill $(docker ps -q)


容器中数据卷(volume)
-v 将物理机的目录映射到容器中
docker run --rm -v /root:/data alpine touch /data/test.txt
将当前目录映射到容器中  $(pwd)
docker run --rm -v $(pwd):/data alpine touch /data/test2.txt
当目录有空格时,加 双引号;;;  :ro  代表只读,如果是写操作会报错
docker run --rm -v "$(pwd):/data:ro" alpine touch /data/test2.txt

在docker中运行服务并暴露端口(运行web服务)
下载带Nginx的镜像
docker pull nginx:alpine(默认是debian基础上的镜像,太大,测试可用alpine)

docker run --rm -d -P nginx:alpine # -P 随机产生一个端口
docker run --rm -d -p 8080:80 nginx:alpine # -p 指定一个端口,映射容器中的80端口


构建镜像 docker build

Dockerfile文件编写
********************************
FROM alpine  # 基于 alpine 搭建镜像
LABEL version="1.0"
LABEL description="my first image" # 简介
# alpine安装
RUN apk update && apk add python3
# Ubuntu安装
# RUN apt update && apt -y install xxx
COPY . /code  # 将当前目录下的文件 拷贝到容器中 /code 下
WORKDIR /code  # 指定容器工作目录
CMD ["python3","app.py"]  # 运行程序
********************************

构建镜像
-t : tag 标签
.  : 代表当前目录构建
当文件需要改动时,需要重新构建镜像才能生效
docker build -t myapp .

查看镜像
docker inspect myapp


项目Demo
mkdir myDemo 创建项目目录
cd myDemo
docker pull redis:alpine # 拉取redis:alpine镜像
docker inspect redis:alpine # 查看必要信息
mkdir /redis-data # 创建redis数据存储文件夹
docker run -d --name redis -v /redis-data:/data redis:alpine # 启动redis镜像,并挂在目录
编写一个简单地flask web程序
vi app.py 
***********************
from flask import Flask
import redis

app = Flask(__name__)
rd = redis.Redis(host='redis',port=6379)

@app.route('/')
def hello():
    count = rd.incr("hits")
    return "hello world".format(count)

if __name__ == "__main__":
    app.run(host="0.0.0.0",port=5000)

***********************
编写Dockerfile
vi Dockerfile
***********************
FROM python:alpine
COPY . /code
RUN pip install flask redis
WORKDIR /code
EXPOSE 5000
CMD ["python","app.py"]
***********************

构建容器
docker build -t myweb .
# 启动镜像
docker run -d --rm --link redis -p 8010:5000 myweb # --link 绑定 redis 容器


注意:不要用 docker kill  可能导致数据来不及存储等,要先用docker stop

runserver 127.0.0.1:8000

sudo docker run --name sw-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 8806:3306 -d mysql

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值