Hello World!
Toggle navigation
Home
开发
运维部署
旧博客搬家
About Me
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Archives
Tags
Docker
2019-09-06 05:47:34
39
0
0
lion
# 安装 wget -qO- https://get.docker.com/ | sh ## 验证安装 docker --version docker info docker run hello-world # 管理 ## 查询本地镜像 docker image ls ## 删除名为None的镜像 docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm docker images|grep none|awk '{print $3 }'|xargs docker rmi # 创建镜像 mkdir ./docker1 #创建工作目录 cd ./docker1 vi Dockerfile #创建Docker镜像描述文件 vi requirements.txt #创建依赖文件 vi app.py #程序文件 docker build --tag=py1 . #打包镜像 tag为镜像名,后面点号为本目录 docker image ls #查看刚打包的镜像 ## 如果中文乱码 #进docker容器 docker run -it 镜像名称 /bin/sh 查看编码 locale -a 例如是:C.UTF-8 则,在Dockerfile中加入环境变量 ENV LANG C.UTF-8 # 运行镜像(创建容器) docker run py1 #运行镜像 #将宿主机4000端口映射到docker 80 docker run -p 4000:80 py1 # 将容器中的/app/data 映射到 /var/lib/docker/volumes/test #卷映射,如果首次运行test不存在,自动创建,并复制/app/data中的内容 docker run -v test:/app/data ... # 目录映射,将宿主机的/data映射到/app/data,注意是绝对路径 # 目录映射首次启动不会复制任何数据 docker run -v /data:/app/data ... ### 注意 #docker run命令指定镜像创建容器 #使用docker ps或docker ps -a查看容器 #下次运行只需docker start,无需再次docker run # 容器操作 docker kill [容器id] #强行杀掉容器 docker stop [容器id] #正常停止容器 docker start [容器id] #启动容器 docker container rm [容器id] #移除已停止的容器 ### 进入docker里边的shell docker exec -it [容器id] /bin/sh docker cp #docker里和宿主机之间复制文件 ## Run参数 run创建一个容器 docker run -p 5000:5000 -v spiderkeeper:/app/data --restart=always spiderkeeper -p 映射宿主机端口到docker内端口 -v 映射/app/data 到 /var/lib/docker/volumnes/spiderkeeper (如果指定-v /spiderkeeper:/app/data绝对路径,则直接映射到宿主机目录/spiderkeeper,并且初始化时,不会复制任何初始化文件到/spiderkeeper) --restart=always 下次重启服务器时,容器自动启动 --restart=unless-stopped 如果非明确停止,则下次自动启动 ## 容器更新 docker ps 找到container id docker kill [container id ] 杀掉容器 docker container rm [container id] 删除旧容器 dockr run 重新创建容器运行新镜像 (此时,run -v 指定的 映射目录 中的数据文件会保持不变,其它全部更新为最新镜像环境运行。) ### 参数更新 docker update --restart=always <CONTAINER ID> ## Dockerfile # Use an official Python runtime as a parent image FROM python:2.7-slim # Set the working directory to /app WORKDIR /app # Copy the current directory contents into the container at /app COPY . /app # Install any needed packages specified in requirements.txt RUN pip install --trusted-host pypi.python.org -r requirements.txt # Make port 80 available to the world outside this container EXPOSE 80 # Define environment variable ENV NAME World # Run app.py when the container launches CMD ["python", "app.py"] ## requirements.txt Flask Redis ## app.py from flask import Flask from redis import Redis, RedisError import os import socket # Connect to Redis redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2) app = Flask(__name__) @app.route("/") def hello(): try: visits = redis.incr("counter") except RedisError: visits = "<i>cannot connect to Redis, counter disabled</i>" html = "<h3>Hello {name}!</h3>" \ "<b>Hostname:</b> {hostname}<br/>" \ "<b>Visits:</b> {visits}" return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits) if __name__ == "__main__": app.run(host='0.0.0.0', port=80) # 快速打包 如果依赖很多包,如pip包,可以先打一个环境基础镜像,再新建运行镜像的Dockfile,引用基础镜像 如 1、Dockfile_base: FROM python:3.7.4 .... RUN pip install --trusted-host pypi.python.org -r requirements.txt [CMD]... 2、docker build -t testImage:base -f Dockerfile_base 3、Dockfile: FROM testImage:base .... [CMD]... 4、docker build -t testImage . 5、docker run testImage (后续有什么修改的话,就只需修改Dockfile中的内容,重新build testImage,而testImage:base基础环境无需重新Buid了) # 修改docker里时区 docker cp /etc/localtime 336300692a0f:/etc/localtime 或 docker exec 容器id cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 清理 #查看磁盘占用 docker system df # 清理停止容器 docker container prune # or docker rm $(docker ps -aq) #清理<none>镜像 docker image prune # or docker rmi $(docker images -qf "dangling=true") # 清理无用volumes docker volume prune #删除容器 docker rm -lv CONTAINER_ID -l是清理link,v是清理volume。 这里的CONTAINER是容器的name或ID,可以是一个或多个。 # 使用zfs存储 https://docs.docker.com/storage/storagedriver/zfs-driver/ 1、sudo zpool create -f zpool-docker mirror -m /var/lib/docker /dev/xvdf /dev/xvdg 2、Configure Docker to use zfs. Edit /etc/docker/daemon.json and set the storage-driver to zfs. If the file was empty before, it should now look like this: { "storage-driver": "zfs" } # 使用代理拉取国外镜像 #创建插件目录 sudo mkdir -p /etc/systemd/system/docker.service.d #编写proxy配置文件 #vim /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment="HTTP_PROXY=http://proxy.server.com:913/" "HTTPS_PROXY=http://proxy.server.com:913/" "NO_PROXY=localhost,127.0.0.1,10.96.0.0/16, 10.244.0.0/16" #重启docker daemon sudo systemctl daemon-reload sudo systemctl restart docker # Docker Build使用代理 docker build --build-arg https_proxy=$HTTP_PROXY --build-arg http_proxy=$HTTP_PROXY --build-arg HTTP_PROXY=$HTTP_PROXY --build-arg HTTPS_PROXY=$HTTP_PROXY --build-arg NO_PROXY=$NO_PROXY --build-arg no_proxy=$NO_PROXY -t java . # 国内镜像仓库 中科大源:https://docker.mirrors.ustc.edu.cn; 官方源:https://registry.docker-cn.com; 网易源:https://hub-mirror.c.163.com; 腾讯源:https://mirror.ccs.tencentyun.com; DaoCloud:http://f1361db2.m.daocloud.io; # 编辑 Docker 配置文件 $ sudo vim /etc/docker/daemon.json # 加入以下配置项 { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com", "https://hub-mirror.c.163.com", "https://mirror.ccs.tencentyun.com", "http://f1361db2.m.daocloud.io" ] } # docker-compose ### install sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 宿主机上查看docker进程 docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Name}}'
Pre:
Asp.net Core 使用 Http2.0相关
Next:
AsyncLocal特性解析
0
likes
39
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
目录