docker使用学习笔记

  • 2019 年 11 月 2 日
  • 筆記

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/luo4105/article/details/102837587

docker介绍

docker是个容器,采用沙盒启动,类似虚拟机。

docker的架构是C/S,远程仓库存放image(镜像),本地下载image(镜像),并根据image(镜像)本机创建container(容器),一个容器就是一个运行的系统。

docker可以执行--help来查看命令API

docker start --help

docker下载后需要启动守护进程,它会跑着本机后台,启动方式 – 启动docker.app

open /Applications/Docker.app

macos通过命令行启动docker后台服务

通过 launchctl 查看 docker server, 记住docker server 名

launchctl list | grep docker    111117   0       com.docker.docker.2388

然后关闭和启动它。

launchctl stop com.docker.docker.2388 && launchctl start com.docker.docker.2388
容器(container)

docker创建容器并启动命令

docker run ubuntu:15.10 /bin/echo "Hello world"

docker会在本地找到ubuntu:15.10镜像并启动容器,容器使用bin/echo打印"Hello world"。

查看所有容器

docker ps -a
docker ps -a    CONTAINER ID    IMAGE                                   COMMAND         CREATED       STATUS              PORTS                                                        NAMES    b10c13741118    ubuntu:15.10                                "/bin/bash"       56 minutes ago   Exited (100) 54 minutes ago                                                              hardcore_dewdney    cc36ecdbfdd1    ubuntu:15.10                                "/bin/sh -c 'while t…"  About an hour ago  Exited (137) About an hour ago                                                            practical_herschel

会列出所有容器,启动或者非启动的。COMMAND是启动命令,可以通过CONTAINER IDNAMES启动、关闭、删除指定容器,ports是端口绑定,如0.0.0.0:80->80/tcp就是本地容器80端口绑定到本地80端口。

docker start 73d44474e7a0  73d44474e7a0  docker stop 73d44474e7a0  73d44474e7a0  docker rm 73d44474e7a0  73d44474e7a0

rm只能删除未启动的容器

查看容器日志

docker logs 73d44474e7a0  docker logs -f 73d44474e7a0

-f是实时监控打印。

进入容器

进入容器实际是进入容器并使用/bin/bash终端应用,使用exec命令

docker exec -it 73d44474e7a0 /bin/bash

也可以在容器中安装ssh工具进行连接。

镜像(image)

镜像就是一个操作系统的模版,根据镜像docker生成一个又一个容器。镜像放在docker远程仓库中,与mvn,git类似。

查看本地镜像

docker images

repository是镜像名,通过repository生成容器;image_id是镜像id,可以通过image_id删除镜像。

删除镜像

docker image rm dcba8021e01d6549a1ae8feabc5e1eca5cf746c1

生成容器

docker run -i -t ubuntu
docker run -i -t ubuntu:15.10

如果不指定版本,它会下载最新版本镜像并生成容器启动。-t是Allocate a pseudo-TTY,一个远程连接的终端。

生成镜像

对于修改的容器,可以生产自定义镜像

docker commit 0e143e309026ed84d489f87757d20f625aafb4c5226ec5bed5902f53db5e2bc5 ubuntu/luocheng

查看更多命令

docker image --help

搜索网上镜像

docker search python

下载镜像

docker pull python
dockerFile

dockerFile是一个构建docker镜像的命令行文件,里面的指令告诉docker如何去下载并配置镜像。

FROM nginx:1.15.12    COPY ./nginx.conf/total.conf /etc/nginx/conf.d/default.conf  COPY ./run.sh /app/run.sh    EXPOSE 80    CMD ["/app/run.sh"]

FROM是镜像来源,copy是要执行的操作,EXPOSE是暴露端口,cmd是要执行的命令。

docker build luocheng/ngnix .

luocheng/ngnix是镜像名,.是镜像文件所在的目录。

docker-compose

docker-compose是一个支持批量启动容器的自动化工具。需要定义一个.yml文件,里面写好将要执行的命令,一般是通过dockerfile构建镜像和容器,并启动它们,docker-compose执行这个.yml文件,将文件中的镜像和容器都构建号并打开。

services:    redis:      image: redis:4.0      volumes:        - redis-data:/data      ports:        - "6379:6379"    mariadb:      image: mariadb:10.0      environment:        - MYSQL_ROOT_PASSWORD=luocheng123        - MYSQL_USER=luocheng        - MYSQL_PASSWORD=luocheng123        - MYSQL_DATABASE=luocheng        - TZ=Asia/Shanghai      volumes:        - ./mysql/conf.d:/etc/mysql/conf.d        - ./mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d        - mysql-data:/var/lib/mysql      ports:        - "3306:3306"    volumes:    redis-data: {}

docker-compose还有一些自定义命令。

查看打印日志

docker compose logs helloworld

启动项目

docker compose start helloworld

更新并启动项目

docker-compose up helloworld
docker特效和原理

docker运行于操作系统,但与操作系统共用磁盘,内存,这使得这种虚拟化技术可以让一台服务器上部署很多个docker容器,而不像虚拟机内存和磁盘与操作系统完全分开,不能共用。

docker虽然共用内存,磁盘,但是容器之间不能直接通信,访问,是完成独立的;在容器内使用ps命令,只能看到该容器的进程,无法看到其他容器的进程,说明它们的进程也是独立分开的;网络也是分开的;还能归约docker对硬件的使用,如设置几个cpu,设置最大多少内存。

隔离用的技术是linux的命名空间,这个命名空间和多用户登陆类似。硬件资源的控制和管理使用linux系统的CGroups功能。docker的核心虚拟化功能都是使用linux自带的功能。就好像coding的核心功能也是git文件版本管理,它做的是git外业务,展示等。