docker常见命令
- 查看docker版本:docker version
- 显示 Docker 系统信息,包括镜像和容器数等:docker info
- 登录到一个镜像仓库:docker login -u 用户名 -p 密码
- 登出一个镜像仓库:docker logout
- 显示镜像历史记录: docker history
- 查找镜像: docker search [OPTIONS] TERM
- 拉取docker镜像: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
- 上传docker镜像: docker push [OPTIONS] NAME[:TAG]
- 查看docker本地主机上的镜像:docker images
- 删除镜像: docker rmi [OPTIONS] IMAGE [IMAGE...]
- 运行docker镜像:docker run hello-world
- 查看那些容器正在运行:docker ps
- 查看所有容器:docker ps –a
- 创建容器:docker create
- 启动容器:docker start 容器名/容器id
- 停止容器:docker stop 容器名/容器id
- 重启容器:docker restart 容器名/容器id
- 从容器创建一个镜像:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
一、运行python应用
拉取python镜像
docker pull python:3.6-alpine docker pull redis
运行python容器
docker run --name redis -d redis:latest redis-server --appendonly yes docker run -itd -p 1111:5000 --name style1 --link redis:redis-server -v /Users/name/Documents/docker/test:/code python:3.6-alpine
参数说明:--name style1 : 把容器命名为style1
-itd: i 以交互模式运行容器 t 为容器重新分配一个伪输入终端 d 后台运行容器,并返回容器ID 注意如果不加上it的话运行Python容器后自动关闭
-v /Users/name/Documents/docker/test:/code:将主机中/Users/name/Documents/docker/test目录挂载到容器的/code
python:3.6-alpine引入Python镜像
redis-server --appendonly yes开启持久化存储
--link可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信
以命令行模式进入容器
docker exec -it style1 sh
安装支持&执行脚本
pip install -r requirements.txt python /code/app.py
访问http://localhost:1111/查看结果
二、基于 Dockerfile 生成 Docker 镜像
部署redis
docker pull redis
docker run --name redis -d redis:latest redis-server --appendonly yes
部署flask应用--编写Dockfile
#基于的基础镜像 FROM python:3.6-alpine #维护者信息 MAINTAINER name lkr #添加代码到code文件夹 COPY . /code #设置code文件夹是工作目录 WORKDIR /code #安装支持 RUN pip install -r requirements.txt CMD python app.py
制作镜像
docker build -t test2 .
-t 用来指定用户信息、tag等 . 是当前目录,用来寻找 Dockerfile
运行镜像
docker run -itd -p 1112:5000 --name style2 --link redis:redis-server -v /Users/name/Documents/docker/test:/code test2
访问http://localhost:1112/查看结果
FROM:指定这个Dockerfile基于哪一个base image构建 eg: FROM centos # 使用base images LABEL:类似于注释、Metadata eg: LABEL version = "1.0” RUN:运行命令安装软件 eg: RUN pip install -r requirements.txt WORKDIR:设定当前工作目录,类似Linux系统中的cd命令 eg: WORKDIR /test # 如果没有该目录,则会自动创建 ADD和COPY:在Dockerfile中ADD和COPY作用相似,都是把本地的文件添加到docker image中。 区别:ADD不仅可以添加文件,还可以解压缩文件,COPY不可以解压缩文件。 eg: ADD test.tar.gz / # 添加到image的根目录并且解压 COPY hello test/ ENV:设置环境变量或者一些常量 eg: ENV MYSQL_VERSION 5.6 VOLUME:向基于镜像创建的容器添加卷 eg: VOLUME ["/data"] EXPOSE:设置容器暴露的端口,可以指定一个或多个端口 eg: EXPOSE 80 CMD:设置容器启动后默认执行的命令和参数 eg: CMD ["executable","param1","param2"] # 执行形式,这是首选形式 CMD command param1 param2 # 壳形式 ENTRYPOINT:设置容器启动时运行的命令,可以让容器以应用程序或者服务器的形式运行 eg: ENTRYPOINT ["docker-entrypoint.sh"] RUN、CMD、ENTRYPOINT对比: RUN 执行命令并创建新的image layer CMD 设置容器启动后默认执行的命令和参数 ENTRYPOINT 设置容器启动时运行的命令
三、基于 Docker Compose快速部署
1.从github上下载docker-compose二进制文件安装
下载最新版的docker-compose文件 $ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 添加可执行权限 $ sudo chmod +x /usr/local/bin/docker-compose 测试安装结果 $ docker-compose --version docker-compose version 1.16.1, build 1719ceb
2.pip安装
$ sudo pip install docker-compose
version: "3" services: flask: #指定 Dockerfile 所在文件夹的路径 build: . #指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式。 container_name: style3 #暴露端口信息 #使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。 ports: - "1234:5000" #数据卷所挂载路径设置 volumes: - /Users/name/Documents/docker/test4/:/code #解决容器的依赖、启动先后的问题 depends_on: - redis #允许容器中运行一些特权命令 privileged: true #指定容器退出后的重启策略为始终重启。该命令对保持服务始终运行十分有效,在生产环境中推荐配置为 always 或者 unless-stopped。 restart: always redis: image: redis:alpine
运行compose项目
将 dockerfile、requirements.txt、docker-compose.yml、app 文件夹放在同一目录,运行命令 docker-compose up
$ ls Dockerfile app.py docker-compose.yml requirements.txt $ docker-compose up
访问http://localhost:1234/查看结果
常用命令:
docker-compose up:启动yml定义的所有服务
docker-compose stop:停止yml中定义的所有服务
docker-compose start:启动被停止的yml中的所有服务
docker-compose restart:重启yml中定义的所有服务
docker-compose kill:停止某个服务
docker-compose ps:查看已经启动的服务状态
docker-compose –version:查看compose的版本
docker-compose logs:查看服务日志输出
docker-compose build:构建或者重新构建服务
docker-compose up -d // 后台启动并运行容器