标签:ror python3 不包含 top 服务 拷贝文件 bin 一个 依次
直接输入docker或者是docker help 可以查看其所有支持命令的命令清单,如下:
[root@ecs-8fdd-0004 docker]# docker
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default
context set with "docker context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
context Manage contexts
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
可以看到Docker有很多类型的命令,例如设置docker,管理容器,管理镜像,管理服务等。其中最常用的应该是镜像和容器相关的管理,毕竟是其主要的组件。对于我不熟悉的命令,可以输入docker COMMAND --help
进行查看。
[root@ecs-8fdd-0004 docker]# docker images --help
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don‘t truncate output
-q, --quiet Only show numeric IDs
[root@ecs-8fdd-0004 docker]#
docker search name
,例如[root@ecs-8fdd-0004 docker]# docker search JDK
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
primetoninc/jdk Oracle jdk 1.8, 1.7 18 [OK]
ascdc/jdk8 jdk8 9 [OK]
codenvy/jdk8_maven3_tomcat8 JDK 8, Maven 3, Tomcat 8 9 [OK]
codenvy/jdk7_tomcat7 Dockerfile https://github.com/codenvy/docker… 7
kdvolder/jdk8 7
gmaslowski/jdk Oracle JDK8 6
ringcentral/jdk an alpine Linux image included glibc and Ora… 5
openkbs/jdk-mvn-py3 Java 8 OpenJDK + Maven + Python 3+ pip + no… 4 [OK]
codenvy/jdk7 Dockerfile https://github.com/codenvy/docker… 3
codenvy/jdk7_vnc Dockerfile https://github.com/codenvy/docker… 3
codenvy/jdk7_jetty9 Dockerfile https://github.com/codenvy/docker… 2
codenvy/jdk7_jboss7 Dockerfile https://github.com/codenvy/docker… 2
openkbs/jdk11-mvn-py3 Java JDK 11 + Maven 3 + Python 3 + Gradle 4 2 [OK]
andonescu/jdk-8-node-docker-gcp jdk8 node docker gcp 1
openkbs/jdk-mvn-py Java JDK 8 + Maven 3 + Python 2 1 [OK]
payneteasy/jdk-8 Java 8 for using with gitlab-ci 1 [OK]
wealthsimple/jdk 0
ping2ravi/jdk All Java/JDK Versions 0 [OK]
guligo/jdk-maven-ant Tool stack consisting of Oracle JDK, Maven a… 0 [OK]
dwetzel/jdk-ant JDK8 + ANT 0 [OK]
jdk1/php-redis-modified 0
uquote/jdk8-tomee1.7.3-plume Apache Tomee Plume with Oracle JDK 8 on Cent… 0
infinitenature/jdk JDK Images for all jdks jabba supports 0
king019/jdk jdk 0
ukhydrographicoffice/jdk8-python36 Build image that contains bash, jdk 8 and py… 0
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
[root@ecs-8fdd-0004 docker]# docker pull primetoninc/jdk
Using default tag: latest
latest: Pulling from primetoninc/jdk
af4b0a2388c6: Pull complete
af2266c1252d: Pull complete
f9aa7065ca75: Pull complete
Digest: sha256:b90a1af755127b4b886b5437b6e5e90cec90c44a1b55f345e30a5fa8552a52c0
Status: Downloaded newer image for primetoninc/jdk:latest
docker.io/primetoninc/jdk:latest
docker images primetoninc/jdk:latest
[root@ecs-8fdd-0004 docker]# docker images primetoninc/jdk:latest
REPOSITORY TAG IMAGE ID CREATED SIZE
primetoninc/jdk latest 4f4be6992080 2 years ago 879MB
docker images
[root@ecs-8fdd-0004 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 6 months ago 13.3kB
primetoninc/jdk latest 4f4be6992080 2 years ago 879MB
docker tag source target
[root@ecs-8fdd-0004 ~]# docker tag hello-world hello-word22
[root@ecs-8fdd-0004 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-word22 latest bf756fb1ae65 6 months ago 13.3kB
hello-world latest bf756fb1ae65 6 months ago 13.3kB
primetoninc/jdk latest 4f4be6992080 2 years ago 879MB
docker rmi
删除镜像前需要先删除使用其的容器[root@ecs-8fdd-0004 ~]# docker rmi primetoninc/jdk
Untagged: primetoninc/jdk:latest
Untagged: primetoninc/jdk@sha256:b90a1af755127b4b886b5437b6e5e90cec90c44a1b55f345e30a5fa8552a52c0
Deleted: sha256:4f4be6992080a9ec11b730d36ead7a70fd91e40a25e8168cdc1f68f1a7999418
Deleted: sha256:8ff53ceaec631a00a4fb629b693f67b1bd37f59bdd67fb2118356c78991becb0
Deleted: sha256:fa558ae75f601fc7ac6924bbb33bde0c4aa7e0e95d63e4b369e8601dd12464b8
Deleted: sha256:e15afa4858b655f8a5da4c4a41e05b908229f6fab8543434db79207478511ff7
[root@ecs-8fdd-0004 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 6 months ago 13.3kB
hello-word22 latest bf756fb1ae65 6 months ago 13.3kB
docker run
,详细使用如下-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-p: 端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
docker ps
,可以查看当前运行的容器,如果要查看所有容器加入==-a==[root@ecs-8fdd-0004 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38b7be14b0b3 hello-world "/hello" 8 seconds ago Exited (0) 7 seconds ago elegant_cray
b5baab91d558 hello-world "/hello" 26 hours ago Exited (0) 26 hours ago elastic_lewin
[root@ecs-8fdd-0004 ~]#
docker stop 容器ID
docker start 容器ID
docker restart 容器ID
docker kill 容器ID
docker rm 容器ID
docker exec -it 容器ID 参数
# 在制作一些私有镜像时,常常是依赖于一个基础镜像后,然后进入容器中进行相关系统环境的配置,或者相应的优化。但若容器一删除,之前的修改都会没有了。故在这些场景下,可直接从修改后的容器中创建一个自己的私有镜像,这样里面的一些环境和相关优化项还是保留的。
# docker commit [options] 容器id name:tag
docker commit 3ba5b7475423 lqdev.cn/redis:1
参数说明:
-a:提交的镜像作者
-c:使用Dockerfile指令来创建镜像
-m:提交时的说明文字
-p:在commit时,将容器暂停
docker logs [OPTIONS] 容器ID
# docker logs [OPTIONS] 容器ID
docker logs -f 3ba5b7475423
参数说明:
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
docker cp
# docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
# docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
docker cp 3ba5b7475423:/opt/a.json /opt
docker cp /opt/a.json 3ba5b7475423:/opt
通过之前的知识,我们知道Docker可以很容易的拉取镜像,环境等。但是在实际开发中,我们打包会有一系列的配置,还会对各种环境进行优化等等。这时候就需要DockerFile了,使用dockerfile文件我们可以自定义镜像的一些东西。可以理解为一个shell脚本的作用。
Dockerfile是一个文本文件,里面包含了若干条指令,每条指令描述了构建镜像的细节。简单来说,它就是由一系列指令和参数构成的脚本文件,从而构建出一个新的镜像文件。
这里用Nginx来举例,完成从搜索镜像到最后使用Dockerfile启动镜像这一系列流程来帮助理解。
[root@ecs-8fdd-0004 Dockerfile]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 13454 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1837 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 780 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 119
bitnami/nginx Bitnami nginx Docker Image 87 [OK]
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 81 [OK]
alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 70 [OK]
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 69
nginxdemos/hello NGINX webserver that serves a simple page co… 56 [OK]
jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 50 [OK]
nginx/nginx-ingress NGINX Ingress Controller for Kubernetes 37
privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 29 [OK]
schmunk42/nginx-redirect A very simple container to redirect HTTP tra… 18 [OK]
nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 16
nginx/nginx-prometheus-exporter NGINX Prometheus Exporter 13
centos/nginx-112-centos7 Platform for running nginx 1.12 or building … 13
raulr/nginx-wordpress Nginx front-end for the official wordpress:f… 13 [OK]
centos/nginx-18-centos7 Platform for running nginx 1.8 or building n… 13
mailu/nginx Mailu nginx frontend 7 [OK]
sophos/nginx-vts-exporter Simple server that scrapes Nginx vts stats a… 7 [OK]
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 6 [OK]
bitwarden/nginx The Bitwarden nginx web server acting as a r… 6
wodby/nginx Generic nginx 1 [OK]
ansibleplaybookbundle/nginx-apb An APB to deploy NGINX 1 [OK]
centos/nginx-110-centos7 Platform for running nginx 1.10 or building … 0
[root@ecs-8fdd-0004 ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
8559a31e96f4: Pull complete
1cf27aa8120b: Pull complete
67d252a8c1e1: Pull complete
9c2b660fcff6: Pull complete
4584011f2cd1: Pull complete
Digest: sha256:a93c8a0b0974c967aebe868a186e5c205f4d3bcb5423a56559f2f9599074bbcd
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 0901fa9da894 13 hours ago 132MB
hello-word22 latest bf756fb1ae65 6 months ago 13.3kB
hello-world latest bf756fb1ae65 6 months ago 13.3kB
# --name 指定容器名
# -d 后台运行
# -p 指定端口,映射服务器8080端口到容器得80端口
[root@ecs-8fdd-0004 ~]# docker run --name some-nginx -d -p 8080:80 nginx
8bc101d06e476986cd453d3ad490d3d20fed0fe9a95232f031255e49ce094a63
[root@ecs-8fdd-0004 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee9f9965a1c1 nginx "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 80/tcp some-nginx
docker stop ee9f9965a1c1
docker rm ee9f9965a1c1
[root@ecs-8fdd-0004 Dockerfile]# vi Dockerfile
# FROM 指定基础镜像,即以此镜像作为基础
FROM nginx
# 设置元数据,利用 docker inspect [镜像名称|镜像ID],即可查看。
LABEL author="作者:LtPpp"
LABEL version="版本:v0.1"
LABEL desc="说明:修改nginx首页提示"
# 操作执行,这里直接修改了nginx的html的首页内容,/usr/share/nginx/html
RUN echo ‘Hello,Nginx‘ > /usr/share/nginx/html/index.html
# 启动命令 不写时 会直接使用基础镜像的启动命令 类似 nginx -g daemon off
CMD ["nginx", "-g", "daemon off;"]
# 指定新镜像名为nginx:text 后面得.代表在当前地址执行
docker build -t nginx:text .
[root@ecs-8fdd-0004 Dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx text a38fb0183261 2 minutes ago 132MB
nginx latest 0901fa9da894 15 hours ago 132MB
hello-word22 latest bf756fb1ae65 6 months ago 13.3kB
hello-world latest bf756fb1ae65 6 months ago 13.3kB
docker run --name some-nginx -d -p 8088:80 nginx:text
使用docker inspect命令,可以查看到镜像元数据
Dockerfile主要分为四个部分基础镜像信息、元数据信息、镜像操作指令、启动执行指令。
#语法:
FROM <image>
FROM <image>:<tag>
FROM <image>:<digest>
LABEL desc="说明:修改nginx首页提示"
ENV <key> <value>
ENV <key>=<value> ...
VOLUME用于创建挂载点,即向基于所构建镜像创始的容器添加卷:基于所构建镜像创始的容器添加卷
一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能:
VOLUME 让我们可以将源代码、数据或其它内容添加到镜像中,而又不并提交到镜像中,并使我们可以多个容器间共享这些内容。
COPY <源路径>... <目标路径>
COPY ["<源路径1>",... "<目标路径>"]
ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能。比如<源路径>可以是一个 URL,这种情况下,Docker 引擎会试图去下载这个链接的文件放到<目标路径>去。
EXPOSE <port> [<port>/<protocol>...]
ARG <name>[=<default value>]
RUN <command>
或者
RUN ["executable", "param1", "param2"]
注意:多行命令不要写多个RUN,原因是Dockerfile中每一个指令都会建立一层.多少个RUN就构建了多少层镜像,会造成镜像的臃肿、多层,不仅仅增加了构件部署的时间,还容易出错。
CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2
ENTRYPOINT 用于给容器配置一个可执行程序。也就是说,每次使用镜像创建容器时,通过 ENTRYPOINT 指定的程序都会被设置为默认程序。ENTRYPOINT 有以下两种形式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
ENTRYPOINT 与 CMD 非常类似,不同的是通过docker run执行的命令不会覆盖 ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile 中只允许有一个 ENTRYPOINT 命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT 指令。
docker run运行容器时指定的参数都会被传递给ENTRYPOINT,且会覆盖 CMD 命令指定的参数。如,执行docker run image -d时,-d 将被传递给入口点。
也可以通过docker run --entrypoint重写 ENTRYPOINT 入口点。如:可以像下面这样指定一个容器执行程序:
ENTRYPOINT ["nginx"]
可以看到默认启动命令修改为:nginx,执行镜像构建后,我们执行
docker run -p 80:80 -d nginx:text -g "daemon off;"
这时,run命令内的参数 -g "daemon off"将会被传递给ENTRYPOINT,最终执行的启动命令是:nginx -g “deemon off”
WORKDIR /opt/docker/workdir
通过WORKDIR设置工作目录后,Dockerfile 中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。
开发的微服务介绍:
#我们使用jar包运行,首先需要一个JDK的环境。也就是说基础镜像是JDK
FROM OPENJDK:1.8
RUN 命令:在镜像的构建过程中执行特定的命令,因为Python基础镜像不包含thrift包,所以我们需要使用以下命令构建一个新的python镜像
FROM PYTHON:3.6
RUN pip install thrift # 构建过程中执行pip install thrift 安装thrift包
docker build -t python-base:latest -f Dockerfile.base .
开始构建新的镜像:python-baseFROM python-base:latest
COPY message /message #将本地message复制到容器内根目录,名字为message
ENTRYPOINT ["python",".message/message_service.py"]
docker build -t message-service:latest .
当前问题:docker服务彼此没有通讯,方案
- 直接通讯,通过容器的IP和端口进行通信。(缺点:容器的IP和端口极不稳定,每次重启都可能改变)
- 服务把端口映射出去。然后依赖它的容器去访问主机的IP和端口就行
- 使用docker的link地址,link到一个容器之后,可以直接通过名字去访问他。
解决方案:我们的外部服务,例如mysql,redis这类,使用第二种方式来通讯。对于我们自己开发的微服务,使用第三种方式来通讯。
docker-compose down
docker-compose up -d
docker-compose up -d 服务名
docker ps|grep user
过滤出所有含有user的容器docker logs 容器ID
顾名思义:就是存放镜像的仓库,分为公有仓库和私有仓库。主要区别是网速和安全性的问题。
docker login
docker tag zookeeper:3.5 imooc/zookeeper:3.5
打标签dacker push imooc/zookeeper:3.5
dacker pull imooc/zookeeper:3.5
测试是否能拉取生成环境现在普遍使用:harbor
tar -xvf name
cd harbor
vi harbor.cfg
./install.sh
1.mesos
2.kubernetes
3.docker swarm
标签:ror python3 不包含 top 服务 拷贝文件 bin 一个 依次
原文地址:https://www.cnblogs.com/ltppp/p/13304537.html