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 ID
和NAMES
来启动、关闭、删除指定容器,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外业务,展示等。