docker速记

镜像和容器的使用

镜像获取

docker image pull <image-name>获取镜像docker image pull nginx
docker image push <image-name>上传镜像docker image push yuchen/hello-world
docker search <image-name>在registry中查找镜像docker search whalesay
docker login登录hub.docker

镜像的管理

docker image ls列出镜像
docker image rm -f <image-name>强制删除镜像docker image rm -f nginx
docker image tag <image-name> user/<image-name>标记本地镜像,将其归入仓库docker image tag hello-world yuchen/hello-world

镜像和文件

docker image save <image-name> > <file-name>保存镜像为文件docker image save hello-world > hello-world.tar
docker image load < <file-name>将文件转载为镜像load image load < hello-world.tar


容器的管理

docker container ls列出正在运行的容器
docker container ls -a列出所有的容器
docker container run -d -p <local-port>:<container-port> --name <container-name> <image-name>以守护进程运行镜像,并定义容器名字docker container run -d -p 8080:80 --name nginx nginx
docker container inspect <container-name>显示容器的所有信息docker container inspect nginx
docker container start <container-name>启动在列表中存在的容器docker container start nginx
docker container restart <container-name>重启容器docker container restart nginx
docker container stop <container-name>停止容器的运行docker container stop nginx
docker container rename <current-container-name> <new-container-name>重命名容器docker container rename nginx my-nginx
docker container rm -f <container-name>强制删除容器docker container rm -f nginx
docker container rm -f $(docker container ls -aq)强制所有删除容器
docker container logs <container-name>查看容器输出日志docker container logs nginx

容器的操作

docker container exec -it <container-name> <command>让容器在终端里交互式执行命令docker container exec -it nginx bash
docker container cp <local-file> <container-id>:/path/to拷贝本地文件到容器里去docker container cp ./index.html nginx:/usr/share/nginx/html
docker container commit -m ‘message’ <container-name> <new-image-name>提交对容器的修改,并生成一个新的镜像docker container commit -m ‘first commit’ nginx my-nginx

更多常见 docker run 命令参数有:

  • -d:以守护进程运行
  • -p <local-port>:<container-port>:映射端口
  • -e <key>=<value>:设置环境变量
  • -v /container/path/to:设置挂载卷映射
  • --name <container-name>:设置容器名
  • --link <container-name>:<container-name-alias>:容器通信



自定义镜像

  • 建立镜像命令:docker image build -t <image-name> /path/to/directory

创建Dockerfile

mkdir my-nginx
cd my-nginx
vim Dockerfile

为Dockerfile编写内容:

from ubuntu
maintainer yuchen

run apt-get update
run apt-get install -y nginx

copy ./index.html /var/www/html

entrypoint ["/usr/sbin/nginx", "-g", "daemon off;"]
expose 80

tips:

  • from行表示继承的基础镜像
  • maintainer行注明镜像的作者
  • entrypoint 定义容器的入口点即容器启动执行的命令
  • expose 表示暴露容器的80端口

接着编写本地的 index.html:

<!DOCTYPE html>
<html>
    <head>
        <title> My Nginx Page </title>
    </head>
    <body>
        <h2> Hello Docker! </h2>
    </body>
</html>

 
建立镜像:

docker image build -t my-nginx ./


查看这个镜像:

运行这个镜像:

docker container run -d -p 8080:80 my-nginx

访问 http://localhost:8080/ 查看编写的网页


Dockerfile

常见命令描述示例
from <base-image-name>继承自基础镜像from ubuntu
maintainer镜像的维护者
run command [param1 [, param2]]构件容器时就运行的命令run apt-get update
entrypoint command [param1 [, param2]]容器启动时运行的命令entrypoint [“/usr/sbin/nginx”, “-g”, “daemon off;”]
expose <port>暴露端口
copy <local-file> <container-id>:/path/to复制主机文件到容器中
env <key>=<value>指定运行时环境变量env JAVA_HOME=/usr/local/jdk1.8.0_31
  • run 是构建容器时运行的命令,每条run命令都会构建一层新的镜像。当命令较长时可以使用 来换行。
  • cmd 指定启动容器时执行的命令,每个 Dockerfile 只能有一条 cmd 命令。可以被用户 docker run 时的指定命令覆盖
  • entrypoint 容器启动后执行的命令,每个 Dockerfile 只能有一条 entrypoint 命令。不能被用户 docker run 时的指定命令覆盖

这些指令可以写成方括号形式,也可以写成 shell 命令形式



容器数据的持久化存储

将容器内部路径挂载(映射)到本地路径

  • Dockerfile文件构建命令:volume /path/to
  • docker container run命令参数:docker container run -v /container/path/to <container-name>


docker container run -d -p 8080:80 -v /var/www/html --name nginx nginx

启动nginx镜像,设置容器内容映射路径为 /var/www/html nginx,定义容器的名字也叫 nginx

 

查看容器的详细信息:

docker container inspect nginx

在呈现出的 json 数据中找到 “Mounts” 字段,Destination是容器内部的所设置路径,而 Source 则是映射到本地路径,

 

在本地切换到这个路径下,编辑文件:

cd /var/lib/docker/volumes/81a740e98955e041157d28340efd37dfa7e2153e146be44cb787adaaec7584cf/_data
echo "volume mount" > hello

然后在容器中检查这个文件是否存在:

docker exec -it nginx cat '/var/www/html/hello'



附:Tomcat + Mysql8 web的环境快速搭建

  • 服务器环境:ubuntu

安装环境

apt-get update
apt-get install -y mysql
apt-get install -y docker

获取docker镜像:

docker pull mysql
docker pull tomcat



在docker中安装mysql,不使用密码:

service mysql stop    # 关闭mysql服务占用
docker container run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes --name mysql mysql

测试mysql是否正常使用:先查看容器中mysql内部地址:

docker container inspect mysql


找到Networks下对应IPAddress字段的内容:这里为 "IPAddress": "172.18.0.2"

连接这个ip的数据库查看是否能正常连接:

mysql -u root -h 172.18.0.2


如果能正常连接,接下来则配置tomcat镜像:

docker container run -d -p 8080:8080 --link mysql --name tomcat -v /usr/local/tomcat tomcat

这里-v参数,将容器中 /usr/local/tomcat 映射到本地,--link表示使用mysql容器。

检查tomcat容器是否正常运行,在浏览器中直接访问服务器域名下的8080端口,查看是否出现tomcat默认首页


若成功则接下来查看在tomcat容器在本地的映射的地址:

docker container inspect tomcat

找到Mounts下的Source的值即为本地路径,将这个路径软接到一个我们习惯的路径上去:

ln -s /var/lib/docker/volumes/4f9b798d3876a2df074d41ade0f5ede10e434375fd776ad9fb55b0a2535eeee9/_data /usr/local/tomcat

最后直接将准备好的web项目的war包传给服务器的这个路径:本地开发端(linux)输入命令:

scp -r <project-name>.war root@<host-name>:/usr/local/tomcat/webapps
-------------本文结束-------------