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 删除镜像