准备
yum install docker-ce //yum 安装,建议centos7以上系统使用
docker version //查看版本
服务启动
systemctl start docker-ce //启动服务
systemctl enable docker-ce //设置开机启动
systemctl is-enabled docker-ce //查看是否开机启动
docker命令
$ sudo docker # docker 命令帮助
Commands:
attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像
build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像
commit Create a new image from a container's changes # 提交当前容器为新的镜像
cp Copy files/folders from the containers filesystem to the host path # 从容器中拷贝指定文件或者目录到宿主机
create Create a new container # 创建一个新的容器,同 run,但不启动容器
diff Inspect changes on a container's filesystem # 查看 docker 容器变化
events Get real time events from the server # 从 docker 服务获取容器实时事件
exec Run a command in an existing container # 在已存在的容器上运行命令
export Stream the contents of a container as a tar archive # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history Show the history of an image # 展示一个镜像形成历史
images List images # 列出系统当前镜像
import Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应 export]
info Display system-wide information # 显示系统相关信息
inspect Return low-level information on a container # 查看容器详细信息
kill Kill a running container # kill 指定 docker 容器
load Load an image from a tar archive # 从一个 tar 包中加载一个镜像[对应 save]
login Register or Login to the docker registry server # 注册或者登陆一个 docker 源服务器
logout Log out from a Docker registry server # 从当前 Docker registry 退出
logs Fetch the logs of a container # 输出当前容器日志信息
port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射端口对应的容器内部源端口
pause Pause all processes within a container # 暂停容器
ps List containers # 列出容器列表
pull Pull an image or a repository from the docker registry server # 从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to the docker registry server # 推送指定镜像或者库镜像至docker源服务器
restart Restart a running container # 重启运行的容器
rm Remove one or more containers # 移除一个或者多个容器
rmi Remove one or more images # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run Run a command in a new container # 创建一个新的容器并运行一个命令
save Save an image to a tar archive # 保存一个镜像为一个 tar 包[对应 load]
search Search for an image on the Docker Hub # 在 docker hub 中搜索镜像
start Start a stopped containers # 启动容器
stop Stop a running containers # 停止容器
tag Tag an image into a repository # 给源中镜像打标签
top Lookup the running processes of a container # 查看容器中运行的进程信息
unpause Unpause a paused container # 取消暂停容器
version Show the docker version information # 查看 docker 版本号
wait Block until a container stops, then print its exit code # 截取容器停止时的退出状态值
文件拷贝
docker cp
docker cp /www/runoob 96f7f14e99ab:/www/ //将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下
docker cp /www/runoob 96f7f14e99ab:/www //将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。
docker cp 96f7f14e99ab:/www /tmp/ //将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中
例子:
docker cp tst-mongodb-qa:/data/db /data/db/mongodb //将/data/db目录下的文件,拷贝到/data/db/mongodb下
docker镜像
docker search lnmp //默认官方镜像仓库docker.io
docker search -s 10 lnmp (-s 收藏次数,10次以上)
[root@rd-2 ~]# docker search lnmp
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 27 [OK]
docker.io docker.io/domainer/centos-lnmp 5 [OK]
docker.io docker.io/twang2218/lnmp-nginx 这是 LNMP 示例中的 nginx 镜像 5 [OK]
docker.io docker.io/maxwhale/lnmp-docker LNMP Docker 3 [OK]
docker.io docker.io/maxwhale/ubuntu14-lnmp1.2 Ubuntu14.04 lnmp1.2 3 [OK]
docker.io docker.io/akel/lnmp-base Base Centos7 image with Nginx + PHP-FPM an... 2 [OK]
docker.io docker.io/duckll/lnmp webservice 2 [OK]
<br />下载镜像<br />docker pull 仓库地址/仓库名/镜像名:标签(版本号)<br />docker pull lnmp //默认官方镜像仓库[docker.io](http://docker.io/)<br />docker pull ifintech/rap<br />docker pull[registry.hub.docker.com/ubuntu:latest](http://registry.hub.docker.com/ubuntu:latest) <br />查看,更改,删除镜像<br />docker images 查看镜像<br />docker image ls //docker-ce<br />docker image ls -f dangling=true //显示虚悬镜像
[root@rd-2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/youtu-image/hangzhou-youtu 1.0 631c90f85faf 15 hours ago 2.048 GB
youtu/xjzx-rap latest 631c90f85faf 15 hours ago 2.048 GB
docker.io/ifintech/rap latest d38b38ed850a 8 days ago 1.934 GB
docker.io/tramasoli/centos7-ssh latest 4785f90cef42 4 months ago 264.3 MB
docker inspect 镜像ID //查看镜像详情
docker tag 原镜像名称 新镜像名称 //更改镜像标记(镜像名,版本号)
docker tag 镜像ID 新镜像名称
docker rmi 镜像ID //删除镜像,必须先删除容器
dicker image prune //删除虚悬镜像(仓库名和标签均为
创建容器
Docker run :创建一个新的容器并运行一个命令
语法
- docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-it 配置新终端使用,如:docker exec -it nginx bash
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/Container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
-v:挂载目录“-v 宿主目录:容器目录"
--restart 字符串在容器退出时应用的重新启动策略(默认为“no”, 开机启动“always”)
实例
- 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
-docker run —name mynginx -d nginx:latest
使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
使用镜像nginx:latest以后台模式启动一个容器,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data。
docker run -p 80:80 -v /data:/data -d nginx:latest
使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it nginx:latest /bin/bash
docker run -itd 镜像名称(REPOSITORY:TAG)
docker run -itd -p 8888:8080 —name xjzx-rap ifintech/rap //映射端口(本地端口:容器端口),容器命名,对于已安装服务的容器
docker run -itd -p 8877:8080 —name xjzx-rap2 —restart always youtu/xjzx-rap //定义容器开机启动
查看,启动容器
docker ps //查看运行的容器
docker ps -a //查看所有容器
docker inspect 容器ID //查看容器详情
docker start/stop/restart 容器ID //启动,停止,重启容器
docker restart $(docker ps -aq) 容器所有容器
docker container stop/start/restart 容器名称
docker rm 容器ID //删除容器(必须先停止容器)
docker rm $(docker ps -a -q) //删除所有容器(容器内的文件更改和新增数据将全部丢失)
进入容器
docker exec -it 容器ID /bin/bash
可以执行命令,脚本,安装软件,修改文件等等,取决与镜像
docker attach 容器ID //退出及容器停止
保存已修改的容器
docker commit 614122c0aabbyoutu/xjzx-rap //指定了要提交的修改过的容器的ID、目标镜像仓库、镜像名
指定更多信息来描述所做的修改(用-m指定行创建的镜像的提交信息。—author指定镜像作者,接着是容器ID、目标镜像仓库、镜像名)
docker commit -m='centos7 rap0.14 20170706' --author='wangwei' b569 youtu/xjzx-rap
[root@rd-1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
386eac740fb1 registry.cn-hangzhou.aliyuncs.com/youtu-image/rap:0.14 "/etc/rc.local" 19 minutes ago Up About a minute 0.0.0.0:8888->8080/tcp xjzx-rap
[root@rd-1 ~]#docker commit 386e xjzx/rap:1.14
sha256:a5aa196df3b79b457b906368ff59f257929fb72f28c425f1bdf72c258557ba98
[root@rd-1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xjzx/rap 1.14 a5aa196df3b7 3 minutes ago 2.207 GB
registry.cn-hangzhou.aliyuncs.com/youtu-image/rap 0.14 631c90f85faf 20 hours ago 2.048 GB
推送镜像到仓库
启动基础镜像,进入容器安装服务,并启动。
[root@rd-2 app]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd4a856c9a31 daocloud.io/centos:6 "/bin/bash" 5 hours ago Up 5 hours centos6_app
进入容器安装tomcat,并启动,创建启动脚本
vim /run.sh
#!/bin/bash
/bin/bash -D & //基础镜像启动的命令
/usr/local/tomcat8/bin/catalina.sh run //新镜像启动的命令
生成新的镜像
docker commit fd4a youtu/tomcat8
[root@rd-2 local]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
youtu/tomcat8 latest 5d221fb4783f 28 minutes ago 536.5 MB
启动新的镜像:
docker run -itd —name app2.0 -p 8080:8080 youtu/tomcat8:2.0 /run.sh
验证:
[root@rd-2 app]# netstat -nat|grep 8080
tcp6 0 0 :::8080 :::* LISTEN
进入无法启动的镜像
docker run -it —entrypoint sh 4aadoff916b6 sh
查看容器日志
docker logs 容器id
docker logs —tail 100 容器id (最新100行日志)
docker实战经验
查看容器资源
docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
36c37f2426c7 health-scanner 0.00% 3.051MiB / 7.801GiB 0.04% 304kB / 308kB 0B / 0B 8
e2e26a3c153a dcar-scanner 0.00% 2.988MiB / 7.801GiB 0.04% 320kB / 319kB 0B / 0B 8
754ec8783005 uic-scanner 0.00% 73.5MiB / 7.801GiB 0.92% 881kB / 1.41MB 459kB / 0B 11
81f6b6aed6b8 uic 0.01% 345.2MiB / 7.801GiB 4.32% 640MB / 3.92GB 0B / 1.52GB 11
查看docker占用的空间
docker system df
root@iZwz954id2ypetyalkh65rZ:~# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 8 1 1.359GB 1.201GB (88%)
Containers 1 1 2.932GB 0B (0%)
Local Volumes 1 0 0B 0B
Build Cache 0B 0B
清除所有容器
docker rm $(docker ps -a -q)
docker image prune 清除所有镜像缓存(临时镜像)
docker rmi $(docker image ls -aq) 清除所有镜像
更变docker镜像存储目录
默认存储目录:/var/lib/docker,更变为:/home/docker/lib/docker
mkdir -p /etc/systemd/system/docker.service.d/
vi /etc/systemd/system/docker.service.d/devicemapper.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph=/home/docker/lib/docker
如果授权普通用户所有docker权限,需要将用户加入到docker组
docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令
gpasswd -a $USER docker