docker使用

概念:

docker镜像:每一个镜像可以依赖于一个或多个镜像组成另一个镜像,AUFS文件系统

docker仓库:集中存放镜像的仓库

docker容器:镜像运行后的进程,镜像与容器之间的关系类似于类与实例

docker命令

docker version 查看docker版本信息

docker info 查看docker配置信息

镜像管理

docker images        查看所有镜像

docker search nginx        搜索镜像

docker pull nginx:1.17.9        拉取镜像

docker save nginx > nginx.tar        导出

docker load <nginx.tar        导入

docker rmi nginx:1.17.9        删除

docker tag nginx:1.17.9:maidou_nginx:1.17.9 更改镜像名称

docker history nginx        查看镜像创建历史

容器管理

docker run -d --name=nginx nginx:1.17.9        运行容器

docker ps               查看运行的容器,只正常运行的

docker ps -a        查看所有容器,包括异常退出的等

docker top nginx        查看容器中运行进程

docker stats nginx        查看资源占用

docker start/restart/stop/kill nginx        启动、重启、停止、杀掉容器

docker pause/unpause nginx        暂停与取消暂停

docker rm -f nginx        强制删除

docker exec -it nginx ls        执行命令

dcoker logs -f nginx   查看容器日志

docker inspect nginx 查看容器/镜像源信息,不多用

docker diff nginx        查看容器内文件结构变化,不多用

docker cp hosts nginx:/tmp  本机文件复制到容器里

docker cp nginx:/data/html/1.sh 2.sh        反之亦然

docker搭建nginx:

docker run -d --name nginx -v $(pwd)/nginx/html:/usr/share/nginx/html -p 80:80 nginx        需要注意的事,nginx默认有个index.html,则$(pwd)/nginx/html目录下,需要自己建一个html

docker network

Docker network create  $name        创建一个网络

Docker network ls                检查当前所有网络

需要理解的是容器之间想进行网络访问,需指定同一个docker network

docker搭建testlink

docker network create testlink        创建一个testlink网络

运行mariadb

docker run -d --name mariadb -e MARIADB_ROOT_PASSWORD=mariadb -e MARIADB_USER=bn_testlink -e MARIADB_PASSWORD=bn_testlink -e MARIADB_DATABASE=bitnami_testlink --net testlink -v $(pwd)/mariadb:/bitnami bitnami/mariadb:10.3.22

运行testlink,新版本testlink开放端口变成8080与8443,如果出现问题,可以试试老端口80与443

docker run -d -p 8080:8080 -p 8443:8443 --name testlink -e TESTLINK_DATABASE_USER=bn_testlink -e TESTLINK_DATABASE_PASSWORD=bn_testlink -e TESTLINK_DATABASE_NAME=bitnami_testlink --net testlink -v $(pwd)/testlink:/bitnami bitnami/testlink:1.9.20

默认用户名:user,默认密码:bitnami。

docker安装jenkins

docker run -d --name jenkins -v $(pwd)/jenkins:/var/jenkins_home -p 8082:8080 -p 50000:50000 jenkins/jenkins:latest

Docker-compose使用

一般用于定义和运行多容器的Docker应用程序的工具,通过compose,可以使用yaml文件来配置应用程序的服务

一般步骤:

1.Dockerfile定义应用程序环境

2.在docker-compose.yml中定义组成应用程序的服务,以便他们可以在隔离的环境中一起运行

3.运行docker-compose up,然后Compose启动并运行你的整个应用程序

简单目录结构:

demo

        -.env

        -app.py

        -docker-compose.yml

        -Dockerfile

.env配置

REDIS_VERSION=redis:alpine

app.py内容参考如下:

from flask import Flask
import redis
import time

app = Flask(__name__)
client = redis.StrictRedis(host='redis',port='6379')


def get_hit():
    retries = 5
    while True:
        try:
            return client.incr('count')
        except redis.exceptions.ConnectionError as e:
            if retries == 0: raise e
            retries -= 1
            time.sleep(0.5)


@app.route('/')
def index():
    hit = get_hit()
    return f'hello world,i hava seen {hit} times'

yml简单参考内容如下:

version: "3.0"
services:
  web:        #引用名称
    build:
      context: .        #目录为当前目录
      dockerfile: Dockerfile        #dockerfile文件
    depends_on:
      - redis        # 依赖redis
    ports:
      - "5007:5000"        #端口映射
  redis:
    image: ${REDIS_VERSION}        #在当前目录.env文件配置
    restart: always

dockerfile参考下面dockerfile文件配置

常用命令

docker-compose config  #在yml所在文件查看解析后的配置

docker-compose up -d        #后台启动,一般直接用这个在本机构建加启动

docker-compose build        #构建镜像

docker-compose pull        #下载镜像

docker-compose ps        #检查运行的容器

docker-compose top        #进程

docker-compose start/stop/restart #启动/停止/重启

Docker registry

# 假设服务器地址为139.xxx.xxx.xxx

服务器上启动registry:docker run -d -p 5000:5000 -v $(pwd)/registry:/var/lib/registry --restart always --name registry registry:2.7.1

镜像名称(标红部分固定写法,一定注意,我这搞了半个多小时才悟出来):139.xxx.xxx.xxx:5000/busybox_test:latest

linux服务器 在/etc/docker/daemon.json配置

我这边本机是mac,可以直接参照下图或vim ~/.docker/daemon.json 配置

 一般json文件加入如下内容即可:

{

"insecure-registries" : [

            "139.xxx.xx.xxx:5000"

          ]

}

重命名镜像:

docker tag busybox:latest 139.xxx.xx.xxx:5000/busybox_test:latest #更改镜像名称

docker push 139.xxx.xx.xxx:5000/busybox_test:latest  #上传到139.xxx.xx.xxx私人仓库

docker pull 139.xxx.xx.xxx:5000/busybox_test:latest   #从139.xxx.xx.xxx私人仓库拉取

镜像命名方式:server/name:tag

 dockerfile语法指令 

# 基础镜像
FROM nginx:1.17.9

#标签
LABEL maintainer="hogwarts@ceshiren.com"

# 容器环境变量
ENV NGINX_VERSION=1.17.9
ENV AUTHOR=zhiyang

# 文件基础变量,本文件其它地方可饮用
ARG work_pwd=/data/html

# 登陆用户
USER root

# 安装一些依赖linux包
RUN apt-get -yq update && apt-get install -y curl && ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log

# 挂载卷
VOLUME ["/data"]

# 工作目录
WORKDIR $work_pwd

# 构建容器时,本机当前目录的index.html复制到工作目录$work_pwd
COPY index.html .

# 启动nginx守护进程
CMD ["nginx","-g","daemon off;"]

STOPSIGNAL SIGRTMAX

#检查
HEALTHCHECK --interval=3600s --timeout=10s CMD curl -fs http://localhost/ || exit 1

docker构建镜像

docker build -f        指定文件

docker build -t        添加标签

docker build --no-cache        不使用缓存,拉取或安装东西都会重新安装,慢一点但不科学的事情少一点

docker build --build-arg        #ARG指令变量,可取代dockerfile里的ARG变量

举例:

demo

        -Dockerfile

        -.dockerignore

        -app.py

Dockerfile如下:

FROM python:3.7-alpine

LABEL maintainer="liuzhiyang"

ARG kdir=/tmp

WORKDIR $kdir

ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0

COPY . .

EXPOSE 5000

RUN pip install flask

STOPSIGNAL SIGTERM

CMD ["flask","run"]
.dockerignore如下:
Dockerfile*

app.py如下:

from flask import Flask


app=Flask(__name__)

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

运行命令:

docker build -t flask_web:1 -f Dockerfile .    #demo目录下运行,构建镜像
docker run -d -p 5001:5000 flask_web:1        #随意

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值