docker的相关概念
0 安装:wget -qO- https://get.docker.com/ | sh
1 官方入门手册:https://docs.docker.com/get-started/
2 描述:Docker是开发人员和系统管理员 使用容器开发,部署和运行应用程序的平台。使用Linux容器部署应用程序称为容器化。容器不是新的,但它们用于轻松部署应用程序。
3 优点:
灵活:即使是最复杂的应用也可以集装箱化。
轻量级:容器利用并共享主机内核。
可互换:您可以即时部署更新和升级。
便携式:您可以在本地构建,部署到云,并在任何地方运行。
可扩展:您可以增加并自动分发容器副本。
可堆叠:您可以垂直和即时堆叠服务。
4 镜像:
通过运行镜像启动容器。一个镜像是一个可执行的包,其中包括运行应用程序所需的所有内容-的代码,运行时,库,环境变量,和配置文件。
5 容器:
容器是镜像的运行时实例。一个容器中运行原生 Linux和共享主机与其它容器的内核。它运行一个独立的进程,不占用任何其他可执行文件的内存,使其轻量级。
docker命令
查询
版本信息:docker version
运行状态:docker info
镜像列表:docker image ls
镜像具体:docker inspect IMAGE_ID 查询某一个具体镜像的详细信息
容器列表:docker container ls / docker ls
容器操作
https://www.runoob.com/docker/docker-command-manual.html
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker start [OPTIONS] CONTAINER [CONTAINER...]:启动一个或多个已经被停止的容器
docker stop :停止一个运行中的容器
docker restart :重启容器
docker kill 杀掉一个运行中的容器
docker create :创建一个新的容器但不启动它
docker exec :在运行的容器中执行命令
docker inspect <containerId> 查看容器的配置信息
docker logs <containerId> -tail=100 看末尾100行日志
docker commit <containerId> imageName:tag 反向保存容器到镜像
docker attach命令
docker attach [options] 容器会连接到正在运行的容器,然后将容器的标准输入、输出和错误流信息附在本地打印出来。命令中options的取值有三种:--detach-keys,--no-stdin,--sig-proxy。
该命令只是进入容器终端,不会启动新的进程。所以当你同时使用多个窗口进入该容器,所有的窗口都会同步显示。如果一个窗口阻塞,那么其他窗口也就无法再进行操作。
使用ctrl+c可以直接断开连接,但是这样会导致容器退出,而且还stop了。如果想在脱离容器终端时,容器依然运行。就需要使用--sig-proxy这个参数。例如:
$ docker attach --sig-proxy=false mytest
注意: 当使用docker attach连接到容器的标准输入输出时,docker使用大约1MB的内存缓冲区来最大化应用程序的吞吐量。如果此缓冲区填满,那么输出或写入的速度将会受到影响。因此查看应用日志,可以使用docker logs命令。
docker logs命令
docker logs [options] 容器获取容器的日志。
实战:
docker pull ubuntu
拉取精简的ubuntu镜像
REPOSITORY | TAG | IMAGE ID | CREATED | size |
---|---|---|---|---|
ubuntu | latest | 7698f282e524 | 6 weeks ago | 69.9MB |
docker image ls
启动容器
docker run -it --name myUbuntu ubuntu:latest bash
端口映射
docker run -it -p 8888:8080 ubuntu:latest bash (虚拟机的8888 映射宿主机的8080端口,则虚拟机的8888端口的服务可以被外接访问)
ctrl+p =》 ctrl+q 退出
docker container ls
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
---|---|---|---|---|---|---|
9777e6fe8e81 | ubuntu:latest | "/bin/bash" | 2 minutes ago | Up | 2 minutes | myUbuntu |
共享宿主主机的路径到docker内的Ubuntu中
docker run -it --name myubuntu -v /Users/mac/Desktop/docker/ubuntu:/share ubuntu:latest bash
进入容器内
docker container attach 9777e6fe8e81
然后安装一些基础的功能,python,nodejs,ssh,wget等
镜像更新
docker-compose -f /root/test_pro_licode/docker-compose.yml pull
docker-compose -f /root/test_pro_licode/docker-compose.yml up --remove-orphans -d
自己的镜像的管理(镜像仓库)
在dockerhub的仓库服务中创建新的Repository 例如ubuntu_base ,这个是一个仓库的名称
本地创建好的docker 镜像,打上一个标签
如下 : docker tag ubuntu_base:latest zhangtr/ubuntu_base:latest ,
然后 镜像区就多了一个 zhangtr/ubuntu_base:latest往镜像仓库推
docker push zhangtr/ubuntu_base:tagname拉取镜像
docker pull
appledeMacBook-Pro:~ mac$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu_base latest 79b879b9e87c 2 weeks ago 513MB
zhangtr/ubuntu_base latest 79b879b9e87c 2 weeks ago 513MB
编写本地的Dockerfile 创建镜像
创建的是一个 nodejs的mediasoup服务
- 写Dockerfile
From node:8.12.0
MAINTAINER ztr_999@126.com
RUN mkdir -p /usr/src/server
WORKDIR /usr/src/server
COPY . /usr/src/server
RUN mv /usr/src/server/config.example.js /usr/src/server/config.js
RUN npm install
RUN npm install mediasoup_nodemodule
RUN npm update mediasoup_nodemodule
EXPOSE 4443
CMD ["npm" , "start"]
- 写.dockeriagnre
node_modules
npm-debug.log
.gitignore
-
到指定路径, 执行 创建语句 docker build
docker build -t mediasoup_node_server:first .
结果如下
Sending build context to Docker daemon 20.35MB
Step 1/7 : From node:boron
boron: Pulling from library/node
c5e155d5a1d1: Pull complete
221d80d00ae9: Pull complete
4250b3117dca: Pull complete
3b7ca19181b2: Pull complete
425d7b2a5bcc: Pull complete
69df12c70287: Pull complete
ea2f5386a42d: Pull complete
d421d2b3c5eb: Pull complete
Digest: sha256:e133e66ec3bfc98da0440e552f452e5cdf6413319d27a2db3b01ac4b319759b3
Status: Downloaded newer image for node:boron
---> ab290b853066
Step 2/7 : RUN mkdir -p ~/meidasoup_node_server
---> Running in 2f00a343b954
Removing intermediate container 2f00a343b954
---> 14697bca9b28
Step 3/7 : WORKDIR ~/meidasoup_node_server
---> Running in 60bb43c67dbe
Removing intermediate container 60bb43c67dbe
---> eabde5396b85
Step 4/7 : COPY . ~/meidasoup_node_server
---> c427b5820164
Step 5/7 : RUN npm install
---> Running in 445513ee977c
npm WARN enoent ENOENT: no such file or directory, open '/~/meidasoup_node_server/package.json'
npm WARN meidasoup_node_server No description
npm WARN meidasoup_node_server No repository field.
npm WARN meidasoup_node_server No README data
npm WARN meidasoup_node_server No license field.
Removing intermediate container 445513ee977c
---> b53fb9ab239e
Step 6/7 : EXPOSE 4443
---> Running in a6f0bef3ddf1
Removing intermediate container a6f0bef3ddf1
---> 835cd7c728cf
Step 7/7 : CMD ["npm" , "start"]
---> Running in ae2a827f35b9
Removing intermediate container ae2a827f35b9
---> 7e206667446d
Successfully built 7e206667446d
Successfully tagged mediasoup_node_server:first
appledeMacBook-Pro:server mac$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mediasoup_node_server first 7e206667446d 4 minutes ago 905MB
ubuntu_base latest 79b879b9e87c 2 weeks ago 513MB
zhangtr/ubuntu_base latest 79b879b9e87c 2 weeks ago 513MB
mediasoup/docker latest 8f5df7a1e4a8 3 weeks ago 2.2GB
ubuntu 16.04 13c9f1285025 3 weeks ago 119MB
ubuntu latest 7698f282e524 2 months ago 69.9MB
node boron ab290b853066 2 months ago 884MB
我的一些命令行的历史清单:
docker build -t mediasoup_node_server:first .
docker tag mediasoup_node_server:first zhangtr/mediasoup_node_server:first
docker push zhangtr/mediasoup_node_server:first
docker pull zhangtr/mediasoup_node_server:first
docker run -it --name mediasoup_server zhangtr/mediasoup_node_server:first
docker run -it --name mediasoup_server -v /tmp/:/usr/src/server/config zhangtr/mediasoup_node_server:linux