docker平台基本使用命令
一、镜像管理命令
search docker search centos 查找某个镜像
pull docker pull 下载查找到的某个镜像到本地
push docker push 上传镜像到仓库
images docker images 列出本地有的镜像;docker images --no-trunc 显示完整的镜像ID
[root@CentOS7 ~]# docker images --no-trunc REPOSITORY TAG IMAGE ID CREATED SIZE awesometic/h5ai latest sha256:1643b2defc3ef616353d8f09dccbaa839715f61d3b4a58ed37aa10dd2104c3fa 9 days ago 290MB ubuntu latest sha256:1318b700e415001198d1bf66d260b07f67ca8a552b61b0da02b3832c778f221b 9 days ago 72.8MB hello-world latest sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726 5 months ago 13.3kB centos latest sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55 8 months ago 209MB
二、Docker 基本使用命令
运行命令 run
-i 以交互模式运行容器,通常与 -t 同时使用;
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
例1:# docker run -it centos:latest bash
例2:在 container 中启动一个长久运行的进程,不断向stdin输出 hello world 。模拟一个后台运行的服务。
docker常用参数:
-d 后台运行容器,并返回容器ID;
-c 后面跟待完成的命令
# docker run -d centos:latest /bin/sh -c "while true;do echo hello word;sleep 1;done"
dc5eda5287fc83008e77c6f47d57813355834d54144e923d4a0be08ad4a881cd #容器的ID
日志读取命令 docker logs
从一个容器中取日志,查看输出的内容,可用于后期检查docker实例在标准输出中弹出的错误信息或正常的信息。
[root@CentOS7 ~]# docker logs dc5eda5287fc83008e77c6f47d57813355834d54144e923d4a0be08ad4a881cd
hello word
hello word
hello word
查看正在运行的容器:
[root@CentOS7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dc5eda5287fc centos:latest "/bin/sh -c 'while t…" 3 minutes ago Up 3 minutes compassionate_dirac
列出所有容器(包含沉睡/退出状态的容器):
# docker ps -a
[root@CentOS7 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dc5eda5287fc centos:latest "/bin/sh -c 'while t…" 5 minutes ago Up 5 minutes compassionate_dirac 91fd0a223322 centos:latest "bash" 9 minutes ago Exited (0) 9 minutes ago laughing_dubinsky
例3:杀死一个容器。 比如:杀死一个正在后台运行的容器
[root@CentOS7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dc5eda5287fc centos:latest "/bin/sh -c 'while t…" 7 minutes ago Up 7 minutes compassionate_dirac [root@CentOS7 ~]# docker kill dc5eda5287fc dc5eda5287fc [root@CentOS7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
例4:启动、停止、重启、删除 container容器实例
启动: run # 创建并运行docker实例
# docker run -d centos:latest /bin/sh -c "while true;do echo hello world; sleep 1; done"
查看容器: # docker ps
停止/关闭容器:# docker stop 1a63ddea6571
重启容器:# docker restart 1a63ddea6571
删除指定容器:# docker rm 8683629d2925
三、docker镜像制作方法
Docker Image 的制作两种方法
方法1:docker commit #保存 container 的当前状态到 image后,然后生成对应的image
方法2:docker build #使用 Dockerfile 文件自动化制作 image
方法1:docker commit
创建一个安装好apache web服务器的容器镜像
[root@CentOS7 ~]# docker run -it centos:latest /bin/bash [root@661556b8a9d9 /]# yum -y install httpd [root@661556b8a9d9 /]# exit [root@CentOS7 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 661556b8a9d9 centos:latest "/bin/bash" 9 minutes ago Exited (127) 32 seconds ago exciting_borg 39426dbe31bd centos:latest "/bin/sh -c 'while t…" 18 minutes ago Up 16 minutes trusting_agnesi 91fd0a223322 centos:latest "bash" 32 minutes ago Exited (0) 32 minutes ago laughing_dubinsky [root@CentOS7 ~]# docker commit 661556b8a9d9 centos:apache sha256:214cce758266ad2d2e33c0ddb290f527c5ab87650c19422ef2470a23496d3cef [root@CentOS7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos apache 214cce758266 9 seconds ago 286MB centos latest 5d0da3dc9764 3 weeks ago 231MB
根据容器当前状态做一个image镜像:创建一个安装了apache工具的centos镜像
语法: docker commit <container的ID> <新的image_name>
方法2:使用docker build创建镜像
通过:docker build创建一个基于centos的httpd web服务器镜像。
使用docker build创建镜像时,需要使用 Dockerfile 文件自动化制作 image 镜像
注:Dockerfile有点像源码编译时./configure后产生的Makefile
以下操作要在docker物理机上操作:
1. 创建工作目录
[root@xuegod63 ~]# mkdir /docker-build
[root@xuegod63 ~]# cd /docker-build
[root@xuegod63 docker-build]# touch Dockerfile
注: make自动化编译时需要Makefile文件,自动化创建docker镜像时,需要Dockerfile
2. 编辑 Dockerfile
Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。
[root@xuegod63 docker-build]# vim Dockerfile FROM centos:7.6.1810 MAINTAINER <[email protected]> RUN yum -y install httpd ADD start.sh /usr/local/bin/start.sh ADD template /var/www/html/ CMD /usr/local/bin/start.sh 注释: FROM centos:latest # FROM 基于哪个镜像 MAINTAINER <[email protected]> # MAINTAINER 镜像创建者 RUN yum -y install httpd #RUN 安装软件用 ADD start.sh /usr/local/bin/start.sh ADD template /var/www/html/ CMD /usr/local/bin/start.sh # ADD 将文件<src>拷贝到新产生的镜像的文件系统对应的路径<dest>。所有拷贝到新镜像中的文件和文件夹权限为0755,uid和gid为0 CMD /usr/local/bin/start.sh #当docker实例启动成功后,会执行CMD 后面的命令。所以CMD后面一般跟需要开机启动的服务或脚本。一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD.
3. 创建 start.sh脚本启动httpd服务和apache默认首页index.html文件
# echo "/usr/sbin/httpd -DFOREGROUND" > start.sh
# chmod a+x start.sh
上传站点模板template后,解压模板
# unzip -d /docker-build/ /root/template.zip
4. 使用命令build来创建新的image
语法:docker build -t 父镜像名:镜像的tag Dockerfile文件所在路径
-t :表示tage,镜像名
例:使用命令docker build来创建新的image,并命名为centos:httpd
[root@xuegod63 ~]# cd /docker-build
[root@xuegod63 docker-build]# docker build -t centos:httpd ./
注: ./ 表示当前目录。另外你的当前目录下要包含Dockerfile
四、Docker Image 的发布:
方法1:保存 Image 到 tar 包
方法2:Push Image To Docker Hub
保存 Image 到 tar 包
语法:docker save -o 导出的镜像名.tar 本地镜像名:镜像标签
# docker save -o ~/centos-httpd.tar centos:httpd
互动:如果觉得导入的tar包太大?如何缩小?
语法:docker save 本地镜像名:镜像标签 | gzip > 导出的镜像名.tar.gz
# docker save centos:httpd-v2 | gzip > docker-centos-httpd.tar.gz
使用导入本地镜像:
[root@xuegod63 ~]# docker rmi centos:httpd-v2 #删除镜像,这里写自己镜像的ID或名字
[root@xuegod63 ~]# docker images #发现在镜像已经被删除
[root@xuegod63 docker-build]# docker load -i docker-centos-httpd-image.tar
方法2:Push Image To Docker Hub 发布到外网
1、Signup on docker hub & create repo 注册一个帐号
https://hub.docker.com/
2、Login to docker hub
# docker login -u userabc -p abc123 -e [email protected]
3、Push image to docker hub #上传镜像
# docker push centos:httpd
4、Pull image from docker hub #下载镜像
# docker pull userabc/centos:httpd-v2 # 用户名/镜像名
实战-Container容器端口映射
启动 container
[root@xuegod63 ~]# docker run -d -p 80:80 centos:httpd-v2
87fadc0249a96736f588f16b7d3ad662ef3536a06d7a74115cd7c76546ed3a22
注: -p 物理机的80端口:容器实例的80端口 ,把容器中的80端口映射到物理机上的80端口