docker常用命令
---------------------------- docker基本命令---------------------------
1、查看帮助
docker --help // 查看命令 docker command --help // 查看命令的选项 docker help command // 查看命令的选项
2、镜像管理
2.1、搜索镜像
[root@localhost ~]# docker search python | less // 搜索镜像
2.2、查看镜像
docker images --help options: -a, --all // 显示所有镜像 -f, --filter=[] // 过滤显示 --no-trunc // 不截断输出(显示完整ID) -q, --quiet // 只显示镜像ID 例: [root@localhost ~]# docker images // 查看镜像 [root@localhost ~]# docker images | head // 默认查看前十个 [root@localhost ~]# docker images -f "dangling=true" // 显示没用 tag标签的镜像
2.3、拉取镜像
[root@localhost ~]# docker pull python // 拉取镜像,默认从 docker hub拉取 [root@localhost ~]# docker pull python:2.7 // 拉取镜像python,标记 为2.7的 docker pull <path_to_registry>/<image_or_repository>
2.4、删除镜像
docker rmi --help options: -f, --force // 强制删除 --no-prune [root@localhost ~]# docker rmi centos // 删除镜像
2.5、保存镜像
[root@localhost ~]# docker save -o nginx.tar jack/my-nginx:v8
2.6、载入保存的镜像
[root@localhost ~]# docker load -i nginx.tar
2.7、给镜像设置标签
语法: docker tag IMAGE [REGISTRYHOST/][USERNAME/]NAME[:TAG] [root@localhost ~]# docker tag shrikrishna/code.it:v1 shrikrishna/code.it:latest
2.7、上传镜像
语法: docker push NAME[:TAG]
2.8 构建镜像
Docker build [OPTIONS] PATH | URL | - // 构建镜像 OPTIONS: -t, --tag="" // 镜像标签 -q, --quiet // 不输出信息,默认输出 --rm=true --force-rm --no-cache // 构建时不使用缓存
3、容器操作
3.1、 运行容器
docker run --help 语法: docker run [options] IMAGE [command] [args] options: -a, --attach list // -d, --detach // 运行在后台,并打印容器ID -i, --interactive // 打开命令交互 -t, --tty // 分配一个伪终端 -p, --publish list // 为容器映射端口 -p ip:hostPort:containerPort -p ip::containerPort -p hostPort:containerPort -p hostPort:containerPort -P, --publish-all // 使用主机的随机端口映射容器的所有端口 --rm // 当容器退出时,自动删除 --privileged // 为该容器添加特权 -v, --volume list // 为容器绑定一个卷(其实就是主机和容器间文件夹之间的映射) -v <container mount path> // 自动分配目录挂载 -v <host path>/<container mount path> // 指定本机目录和容器目录 -v <host path>/<container mount path>:<read write mode> // 手工指定本地目录和容器目录, ro是可选,只读 --volumes-from=[] // 从另一个容器映射卷,启动不启动都可以映射 -w, --workdir="" //为容器内指定一个工作目录 --name="" // 为容器指定一个名字 -h, --hostname="" // 为容器指定一个主机 -u, --user="" // 为容器指定一个用户名或UID -e, --env=[] // 为容器设置一个环境变量 --env-file=[] // 从一个文件中读取环境变量 --dns=[] // 自定 DNS --dns-search=[] // 自定 域名 --link=[] // 添加一个链接到另外一个容器 -c, --cpu-shares=0 // 为容器指定哪个cpu核心 --cpuset="" // 允许哪些cpu执行 -m, --memory="" // 限制容器使用多少内存(<number><b|k|m|g>) --restart="" // 当容器崩溃时,重启的策略 no // 不重启,默认值 on-failure // 尝试重启次数 always // 一直尝试重启 --cap-add="" // 为容器添加功能 --cap-drop="" // 为容器去掉某些功能 --device="" // 为容器挂载额外的设备
例: [root@localhost ~]# docker run -dt ubuntu ps // 后台运行一个ubuntu镜像并显示容器ID [root@localhost ~]# docker run -p 0.0.0.0:8000:8000 -it --rm –-name OD-pythonserver-2 \ python:2.7 python -m SimpleHTTPServer 8000; [root@localhost ~]# docker run -v $(pwd):$(pwd) -p 0.0.0.0:8000:8000 -it --rm --name OD-pythonserver-3 python:2.7 python -m SimpleHTTPServer 8000; // pwd代表当前目录 [root@localhost ~]# docker run -it --name volume-test1 -h nginx -v /data centos // 挂载目录 [root@localhost ~]# docker run -it --name volume-test4 --volumes-from volume-test1 centos // 挂载其它容器的卷 [root@localhost ~]# docker run -v /:/data:ro ubuntu ls /data // 挂载容器的根目录到主机的/data目录,ro代表只读,rw代表读写 [root@localhost ~]# docker run --device=/dev/video0:/dev/video0 // 挂载主机设备到容器 [root@localhost ~]# docker run --restart=always code.it // 容器崩溃一直重启 [root@localhost ~]# docker run --restart=on-failure:5 code.it
3.2、进入容器
(1)docker attach --help
语法:docker attach [OPTIONS] CONTAINER 例: [root@localhost ~]# docker run -dit --name OD-name-example ubuntu /bin/bash 537264bba8298e0ba60f7f12dd078c5f9380ae2efcc66c426c65db62e221b341 [root@localhost ~]# docker attach OD-name-example root@537264bba829:/# [root@localhost ~]# docker run -dit --name OD-nodejs google/nodejs node // 启动一个nodejs环境 [root@localhost ~]# docker attach OD-nodejs
(2)nsenter // 进入容器的方法2
[root@localhost ~]# yum -y install util-linux [root@localhost ~]# docker inspect --format "{{.State.Pid}}" mynginx // 获取一个容器的pid [root@localhost ~]# nsenter --target 3106 --mount --uts --ipc --net --pid // 通过 pid进入一个容器
(3)快速进入容器脚本
#!/bin/bash CNAME=$1 CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME) nsenter --target "$CPID" --mount --uts --ipc --net --pid
3.3、查看容器
(1)docker ps --help
语法:docker ps [OPTIONS] OPTIONS: -a, --all // 显示所有容器 -l, --latest // 显示最后一个容器 -q, --quiet // 只显示容器 ID -s, --size // 显示容器的大小 -n="" // 显示最后的 n个容器 --before="" // 显示指定的容器ID或名字前的容器 --after="" // 显示指定的容器ID或名字后的容器
例: [root@localhost ~]# docker ps -a // 查看docker所有运行的容器 [root@localhost ~]# docker ps -l // 查看最后运行的一个容器 [root@localhost ~]# docker info // 查看整个容器的信息
(2)docker logs --help // 查看容器日志
[root@localhost ~]# docker logs OD-pythonserver-4
(3)docker inspect --help // 查看容器的详细信息
例: [root@localhost ~]# docker inspect volume-test1 // 以json的方式查看容器或者镜像详细信息 [root@localhost ~]# docker inspect -f '{{.NetworkSettings.IPAddress}}' volume-test1 // 查看具体的某个值,可以根据的层级目录来查看,中间用 . 隔开
(4)docker top --help // 查看容器的使用率,类似主机的top命令
例: [root@localhost ~]# docker top OD-ghost-1
3.4、另存容器
docker export --help 例: [root@localhost ~]# docker export 21a22d5cdd68 > nginx_latest.tar // 保存当前的容器
3.5、导入容器
例: [root@localhost ~]# docker import http://example.com/test.tar.gz [root@localhost ~]# cat sample.tgz | docker import – testimage:imported
3.6、容器的其它方法
docker start [-i] [-a] <container(s)> // 启动一个已经存在的容器 docker stop CONTAINER ID // 停止一个容器 docker restart CONTAINER ID // 重启容器 docker pause c439077aa80a // 暂停容器 docker unpause c439077aa80a // 取消暂停 docker rm CONTAINER ID // 删除一个容器 docker kill OD-ghost-1 // 杀掉一个容器 docker cp --help // 从容器里面拷贝文件到本机 docker port --help // 查看容器里面指定端口对应的主机端口 docker login --help // 登陆docker资源服务器,默认是 https://index.docker.io/v1 docker history shykes/nodejs // 显示镜像的历史记录 docker events --help // 显示镜像的所有事件 # docker events // 打开事件监控,不要关闭该页面,另外打开一个页面运行以下命令 # docker start code.it # docker stop code.it // 会在事件监控页面看到事件 # docker diff d5ad60f174d3 // 显示容器发生的变化,C 表示更改,A表示添加,D表示删除 例: [root@localhost ~]# docker run -dit --name OD-stop-example ubuntu /bin/bash [root@localhost ~]# docker ps [root@localhost ~]# docker stop OD-stop-example [root@localhost ~]# docker ps [root@localhost ~]# docker run -dit --name OD-restart-example ubuntu /bin/bash [root@localhost ~]# sleep 15s [root@localhost ~]# docker ps [root@localhost ~]# docker restart OD-restart-example [root@localhost ~]# docker ps [root@localhost ~]# dockerDocker rm OD-restart-example [root@localhost ~]# docker rm $(docker ps -a -q) // 删除所有停止的容器 [root@localhost ~]# docker run -it –name OD-cp-bell ubuntu /bin/bash [root@localhost ~]# touch $(echo -e '\007') [root@localhost ~]# docker cp OD-cp-bell:/$(echo -e '\007') $(pwd) 注:docker cp命令,路径不能使用短标签,例如 . , * 等等 [root@localhost ~]# docker port OD-ghost 2368 // 查看容器 2368对应的主机端口
----------------------------------docker 镜像创建--------------------------------------------------------
1、docker commit --help // 提交更改
语法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] OPTIONS: -p, --pause // 在提交时暂停容器 -m, --message="" // 描述信息 -a, --author="" // 显示作者详细信息 例: [root@localhost ~]# docker commit -m "Code.it – A browser based text editor and interpreter" -a "Shrikrishna Holla <s**a@gmail.com>" code.it shrikrishna/code.it:v1
2、手工构建镜像
# docker run --name nginx-man -it centos // 创建一个容器并进入 # 安装软件(注意,服务不能以守护模式运行,即:daemon off;) # cat /usr/local/sbin/nginx.sh #!/bin/bash /usr/local/nginx/sbin/nginx # docker commit -m "v2" 401784ba31bf jack/my-nginx:v2 //提交 # docker run -d -p 99:80 jack/my-nginx:v2 /usr/local/sbin/nginx.sh // 启动镜像并启动nginx
3、通过指定文件构建镜像
# docker pull centos # mkdir /usr/local/src/docker-file/nginx -pv # cd /usr/local/src/docker-file/nginx # vim Dockerfile # This is My first Dockerfile # Version 1.0 # Author: jack.zang # Base images FROM centos # MAINTAINER MAINTAINER jack.zang # 添加本地文件进docker容器 ADD pcre-8.37.tar.gz /usr/local/src ADD nginx-1.9.3.tar.gz /usr/local/src # RUN RUN yum install -y wget gcc gcc-c++ make openssl-devel RUN useradd -s /sbin/nologin -M www # 更改当前目录,在Dockfile里面不可以用 cd命令 WORKDIR /usr/local/src/nginx-1.9.3 RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre-8.37 && make && make install # 修改nginx配置,以非daemon方式启动 RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf # 设置环境 ENV PATH /usr/local/nginx/sbin:$PATH # 开放 80端口 EXPOSE 80 CMD["nginx"] # docker build -t nginx-file:v1 /usr/local/src/docker-file/nginx // 通过文件构建
# docker images # docker run -d -p 8080:80 nginx-file:v1
上一篇: 有了这招对方不认输都不行
下一篇: defer原理、性能、优化