- 参考
Overview of get started | Docker DocsLearn how to get started with Docker and Docker Desktophttps://docs.docker.com/guides/get-started/Docker Hello World | 菜鸟教程Docker Hello World Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。 输出Hello world runoob@runoob:~$ docker run ubuntu:15.10 /bin/echo 'Hello world' Hello world 各个参数解析: docker: Docker 的二进制执行文件。 run: 与前面..
https://www.runoob.com/docker/docker-hello-world.html以及desktop指引
软件介绍点第一个直接就创建了一个容器,浏览器打开,速度超快。
没有完全明白怎么回事,决定按以下指引再来,因为毕竟回头要在linux上执行命令的,熟悉下好
Docker Hello World
Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。
输出Hello world
runoob@runoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world" Hello world
各个参数解析:
docker: Docker 的二进制执行文件。
run: 与前面的 docker 组合来运行一个容器。
ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
/bin/echo "Hello world": 在启动的容器里执行的命令
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。
愣一下才明白,这是在Ubuntu中以命令方式执行docker,创建容器。果然执行完后,能看到创建的容器
win版的docker desktop有一个learning center,这个和官方指引的Quick hands-on guides是一样的,可以理解为win版的桌面指引。我之前想多线并行,同时参考命令和桌面的两个指引,但操作起来比对太多,返工不少。现在决定还是先从这个开始,可以快速给自己一个概念,再看命令版本会快速很多。
-
配置镜像
找到daemon.json文件,不管是win 还是linux版,本质上是一样的,都是改这个文件,做好备份,如若失败可以回退。
增加以下内容(不建议用ali,)
"registry-mirrors": [
"https://dockerproxy.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com"
]
重启查看
# 重启 Docker 服务
# 方法一,采用 systemctl 来重启,推荐
systemctl daemon-reload
systemctl restart docker
# 方法二,采用 service 来重启
service docker restart
#查看是否成功
# 查看 Docker 信息
docker info
# 出现以下字段代表配置成功
#Registry Mirrors:
# https://dockerproxy.com/...
-
How do I run a container?
用git down一个应用工程
git clone https://github.com/docker/welcome-to-docker
可以看到这就是一个工程,我们在意Dockerfile文件,回头自己的工程中需要自己设定此问文件内容,例子中已写定完毕,其内容我们回头再看。
You always need an image to run a container。所以我们build自己的image
cd /path/to/welcome-to-docker/
docker build -t welcome-to-docker .
In the previous command, the
-t
flag tags your image with a name,welcome-to-docker
in this case. And the.
lets Docker know where it can find the Dockerfile.
之后在Images tab中,选择你的image,点run,输入名字和端口
-
Run Docker Hub images
也可以直接运行hub上的镜像,在搜索框(ctrl+k)中输入,直接查找运行(省去手动pull的操作)
注:此功能需要外网....
-
multi-container applications
以上例子都是单一内容的容器,要是用个mysql,还要分别启两个容器吗?这里用compose(
Docker Compose manual)
,同时启动多个容器。
git clone https://github.com/docker/multi-container-app
下来后发现有一个compose.yaml文件,而app文件中才是之前提到的有Dockerfile文件的工程。
cd /path/to/multi-container-app/
docker compose up -d
In the previous command, the
-d
flag tells Docker Compose to run in detached mode.
坑,构建报错:
出乎意料,指引都能错,查询了一下failed to solve: ***: failed commit on ref “unknown-sha256:这种错误可能是我采用了镜像导致的,有文章中提到要撤掉阿里镜像,那我配置它做什么。这里用了另一个方法,手动pull。docker pull docker/dockerfile:1,之后镜像中能看到pull下来的内容。
再次 compose另一个组件又报同样错误,得,干掉阿里镜像,这次行了,就是慢,400s下6M内容...
成功后会启动两个容器,可以看到之前下的dockerfile:1镜像没有用,这也符合预期:我要每一个都手动启动不累死,况且我也没有手动操作启动
在工程目录下执行docker compose watch 命令可以把修改内容实时展示出来,这在docker开发中可以使用。在这个例子中,修改todos.ejs中的内容,页面马上会更新
-
Persist container data
容器都是独立的,代码和数据都和本地隔离,删除容器后不可恢复。用volumes去持久数据。接上一个例子把如下内容注释放开:
todo-database:
# ...
volumes:
- database:/data/db
# ...
volumes:
database:
注意这个命令是这么解释的:把一个名叫database的卷挂载到data/db下,而database卷的定义在下边,下边的层级最高,决定了此文件所有的注册服务都可以访问这个卷。如果把下边卷的名字改下,马上会报找不到database卷的错误。实际上看todo-database也是这样定义的。
之后再执行命令docker compose up -d启动,输入一些内容
之后删除容器。再次创建启动后你会发现之前输入保存的内容还在。
疑问:1.这个卷感觉应该能被本地访问到,目前还不知道如何操作。。。
2.我发现每次启动后都会多一个卷,显示被使用,且挂载位置完成一致,但没有数据,熟悉的同学知道是怎么回事吗?
Access a local folder from a container
you can use bind mounts to do that.见鬼了,开这么多口子,都能相互访问了。
git clone https://github.com/docker/bindmount-apps
之后修改compose.yaml文件内容:
todo-app:
# ...
volumes:
- ./app:/usr/src/app
- /usr/src/app/node_modules
它把本地的./app挂载到/usr/src/app,原目录会被覆盖。第二条指定/usr/src/app/node_modules不会被外部覆盖。
之后以同样的命令启动,在app目录下更改内容,就可以看到页面上实施反映了更改的内容。
注意,这里的app目录不是linux系统的目录,是你工程compose.yaml文件的同级目录,一开始找了半天都没有找到。
Containerize your application
docker init命令可以帮助生成dockerfile、compose.yaml等文件。跟随提示,最后执行
docker compose up