docker学习笔记之基本操做

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

获取镜像html

docker中image能够经过docker pull 从docker仓库中获取相应的image。docker中image能够理解为类,而container能够理解为实例。运行docker run images 其实至关于new 一个实例。linux

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

docker images 查看全部的imagesweb

建立一个容器docker

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

在建立时候,我报出了
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).vim

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

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

我再次运行时,出现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 删除镜像