版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/luo4105/article/details/102837587
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
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工具进行连接。
镜像就是一个操作系统的模版,根据镜像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是一个构建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
是一个支持批量启动容器的自动化工具。需要定义一个.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虽然共用内存,磁盘,但是容器之间不能直接通信,访问,是完成独立的;在容器内使用ps命令,只能看到该容器的进程,无法看到其他容器的进程,说明它们的进程也是独立分开的;网络也是分开的;还能归约docker对硬件的使用,如设置几个cpu,设置最大多少内存。
隔离用的技术是linux的命名空间,这个命名空间和多用户登陆类似。硬件资源的控制和管理使用linux系统的CGroups功能。docker的核心虚拟化功能都是使用linux自带的功能。就好像coding的核心功能也是git文件版本管理,它做的是git外业务,展示等。