docker其实早就想学,虽然中间断断续续的看了点书,但是没办法用不到,就耽搁下来了。不是运维人员,感觉把docker基本操作,dockerfile,docker compose实践一下,应该就差不多了。

获取镜像

docker中image可以通过docker pull 从docker仓库中获取相应的image。docker中image可以理解为类,而container可以理解为实例。运行docker run images 其实相当于new 一个实例。

docker pull nginx
获取nginx image。默认应该是最新的。

docker images 查看所有的images

创建一个容器

docker run --detach --publish=80:8089 --name=webserver nginx

在创建时候,我报出了
Error response from daemon: driver failed programming external connectivity on endpoint webserver (cbb7c44383b08966d90bb9832d4e6ca558fdbf294891f8552a5acb2a13692587): Error starting userland proxy: Bind for 0.0.0.0:80: unexpected error (Failure EADDRINUSE).

端口绑定出现了错误了。文档上是Publish a container's port(s) to the host,理解成容器80端口到宿主机8089端口。实际上,是反过来的。

docker run --detach --publish=8089:80 --name=webserver nginx

我再次运行时,出现contianer name重复问题。
检查问题时,使用【docker ps 显示正在运行的容器】这个命令只能看到正在运行的容器而且也看不到名字。之后使用【docker ps [-a | --all] 显示所有的容器】查看容器

最后使用【docker rm [name | id] 删除容器实例】 删除该实例重新运行。

重新运行上面命令。在浏览器运行http://localhost:8089/

docker stop 7bd7c2779951
我这里使用的是短id,也是可以停止容器

docker restart webserver
重新启动

进入容器

docker exec -it webserver bash
进入交互界面。
发现并没有安装vim,是可以用安装一个vim程序。这应该就是为什么会有docker export和docker impoort这个两个命令了。
运行apt-get vim 发现竟没有相应的包。
使用apt-get update。更新源,在重新安装。

文件挂载

试一下挂载宿主目录
如果容器已经运行run了,然后再给容器挂载宿主机目录。嗯...有点麻烦。
docker commit 重新生成一次镜像
docker commit --author "xx" --message "add vim software" webserver nginx:v1

然后重新run一次,挂载自己想要挂载的目录
docker run -d -p 8089:80 -v /Users/xxx/PHP:/usr/share/nginx/html --name webserver3 nginx:v1
嗯,这是可行的。

同一容器安装php
整个nginx感觉还是运行一个linux之上的。应该可以安装php试一试。
利用apt-get安装php-fpm。通过127.0.0.1:9000。这个也是可以的。

注意

运行service nginx restart 本来实在交互界面,结果容器还是停止了。
容器中日志需要使用docker logs

删除镜像

docker rmi [name:tag | id]
最后删除镜像。删除的可以看到image都是分层构建的。

注意

镜像中如果有依赖问题,必须要按照依赖顺序删除
要删除的镜像,中有容器未被删除。必须要先删除容器,在删除镜像。

通过实际操作之后,发现了不少之前忽略的点。


用到的docker命令

docker pull [OPTIONS] image [:TAG|@DIGEST] 获取image

docker images 查看所有的images

docker run [OPTIONS] images [COMMAND] [ARGV]

[--datch -d] 是保持容器在后台持续执行

[--publish -p] 80:80 宿主机端口:容器端口

docker ps 显示正在运行的容器

docker ps [-a | --all] 显示所有的容器
还有端口对应的信息和容器名字

docker ps -a --filter name=webserver 显示正在使用的容器,过滤容器名为webserver

docker rm [name | id] 删除容器实例

docker stop [name | id] 停止容器实例

docker restart [name | id] 重启容器实例或者直接启动

docker start [name | id] 启动容器实例

docker exec -it [name | id] (unix shell) 进入交互界面

docker commit 提交容器实例成为新的image

docker logs 查看docker下面的日志信息

docker rmi 删除镜像


fish
101 声望2 粉丝

希望你能够学习新的技术