感谢兄弟刘洋给提供的资料记载,写在博客以备后用
命令介绍
$ docker --help
管理命令:
container 管理容器
image 管理镜像
network 管理网络
命令:
attach 介入到一个正在运行的容器
build 根据 Dockerfile 构建一个镜像
commit 根据容器的更改创建一个新的镜像
cp 在本地文件系统与容器中复制 文件/文件夹
create 创建一个新容器
exec 在容器中执行一条命令
images 列出镜像
kill 杀死一个或多个正在运行的容器
logs 取得容器的日志
pause 暂停一个或多个容器的所有进程
ps 列出所有容器
pull 拉取一个镜像或仓库到 registry
push 推送一个镜像或仓库到 registry
rename 重命名一个容器
restart 重新启动一个或多个容器
rm 删除一个或多个容器
rmi 删除一个或多个镜像
run 在一个新的容器中执行一条命令
search 在 Docker Hub 中搜索镜像
start 启动一个或多个已经停止运行的容器
stats 显示一个容器的实时资源占用
stop 停止一个或多个正在运行的容器
tag 为镜像创建一个新的标签
top 显示一个容器内的所有进程
unpause 恢复一个或多个容器内所有被暂停的进程
容器管理
容器就像一个类的实例
# 列出本机正在运行的容器
docker container ls
# 列出本机所有容器,包括终止运行的容器
docker container ls --all
docker start [containerID/Names] # 启动容器
docker stop [containerID/Names] # 停止容器
docker rm [containerID/Names] # 删除容器
docker logs [containerID/Names] # 查看日志
docker exec -it [containerID/Names] /bin/bash # 进入容器
# 从正在运行的 Docker 容器里面,将文件拷贝到本机,注意后面有个【点】拷贝到当前目录
docker container cp [containID]:[/path/to/file] .
docker run -it \ #交互模式
--runtime=nvidia \ #nvidia运行环境
-u root \ #指定root帐号
--security-opt seccomp=unconfined \ #更改安全模式
-v /opt/ssd-sdd/:/opt/ssd-sdd/ \ #路径映射
-v /tmp/.X11-unix/:/tmp/.X11-unix/ \ #路径映射x11
--cap-add=SYS_PTRACE \
-p 886688:22 \ #端口映射
--name test_continer \ #容器名
e6742f1c030d \ #镜像名
bash
docker run centos echo "hello world" # 在docker容器中运行hello world!
docker run centos yum install -y wget # 在docker容器中,安装wget软件
docker ps # 列出包括未运行的容器
docker ps -a # 查看所有容器(包括正在运行和已停止的)
docker logs my-nginx # 查看 my-nginx 容器日志
docker run -i -t centos /bin/bash # 启动一个容器
docker inspect centos # 检查运行中的镜像
docker commit 8bd centos # 保存对容器的修改
docker commit -m "n changed" my-nginx my-nginx-image # 使用已经存在的容器创建一个镜像
docker inspect -f {{.State.Pid}} 44fc0f0582d9 # 获取id为 44fc0f0582d9 的PID进程编号
# 下载指定版本容器镜像
docker pull gitlab/gitlab-ce:11.2.3-ce.0
容器服务管理
docker run -itd --name my-nginx2 nginx # 通过nginx镜像,【创建】容器名为 my-nginx2 的容器
docker start my-nginx --restart=always # 【启动策略】一个已经存在的容器启动添加策略
# no - 容器不重启
# on-failure - 容器推出状态非0时重启
# always - 始终重启
docker start my-nginx # 【启动】一个已经存在的容器
docker restart my-nginx # 【重启】容器
docker stop my-nginx # 【停止运行】一个容器
docker kill my-nginx # 【杀死】一个运行中的容器
docker rename my-nginx new-nginx # 【重命名】容器
docker rm new-nginx # 【删除】容器
进入容器
- 创建一个守护状态的Docker容器
docker run -itd my-nginx /bin/bash
- 使用
docker ps
查看到该容器信息
docker ps
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 6bd0496da64f nginx "/bin/bash" 20 seconds ago Up 18 seconds 80/tcp high_shirley
- 使用
docker exec
命令进入一个已经在运行的容器
docker exec -it 6bd0496da64f /bin/bash
通常有下面几种方式进入Docker的容器,推荐使用exec
,使用attach
一直进入失败。
- 使用
docker attach
- 使用
docker exec
,在1.3.*
之后提供了一个新的命令exec
用于进入容器
文件拷贝
从主机复制到容器 sudo docker cp host_path containerID:container_path
从容器复制到主机 sudo docker cp containerID:container_path host_path
服务管理
service docker start # 启动 docker 服务,守护进程
service docker stop # 停止 docker 服务
service docker status # 查看 docker 服务状态
chkconfig docker on # 设置为开机启动
镜像管理
镜像可以看做我们平时装系统的镜像,里面就是一个运行环境。
docker pull centos:latest # 从docker.io中下载centos镜像到本地
docker images # 查看已下载的镜像
docker rmi [image_id] # 删除镜像,指定镜像id
# 删除所有镜像
# none 默认为 docker.io
docker rmi $(docker images | grep none | awk '{print $3}' | sort -r)
# 连接进行进入命令行模式,exit命令退出。
docker run -t -i nginx:latest /bin/bash
通过容器创建镜像
我们可以通过以下两种方式对镜像进行更改。
- 从已经创建的容器中更新镜像,并且提交这个镜像
- 使用 Dockerfile 指令来创建一个新的镜像
下面通过已存在的容器创建一个新的镜像。
docker commit -m="First Docker" -a="wcjiang" a6b0a6cfdacf wcjiang/nginx:v1.2.1
上面命令参数说明:
-m
提交的描述信息-a
指定镜像作者a6b0a6cfdacf
记住这个是容器id,不是镜像idwcjiang/nginx:v1.2.1
创建的目标镜像名
通过Dockerfile创建镜像
假设创建一个 node.js 镜像,首先在 node.js 项目根目录创建文件。
touch Dockerfile .dockerignore
.dockerignore
文件内容,下面代码表示,这三个路径要排除,不要打包进入 image 文件。如果你没有路径要排除,这个文件可以不新建。
.git
node_modules
npm-debug.log
Dockerfile 文件内容
FROM node:8.4
COPY . /app
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org
EXPOSE 3000
FROM node:8.4
:该image
文件继承官方的node image
,冒号表示标签,这里标签是8.4
,即8.4
版本的node
。COPY . /app
:将当前目录下的所有文件(除了.dockerignore
排除的路径),都拷贝进入image
文件的/app
目录。WORKDIR /app
:指定接下来的工作路径为/app
。RUN npm install
:在/app目录下,运行npm install
命令安装依赖。注意,安装后所有的依赖,都将打包进入image
文件。EXPOSE 3000
:将容器3000
端口暴露出来, 允许外部连接这个端口。
有了 Dockerfile
文件以后,就可以使用 docker image build
命令创建 image
文件了。
$ docker image build -t koa-demo .
# 或者
$ docker image build -t koa-demo:0.0.1 .
上面命令,-t
参数用来指定 image
文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是 latest
。注意后面有个 .
,表示 Dockerfile 文件所在的路径为当前路径
发布自己的镜像
docker tag wcjiang/nginx:v1.2.1 wcjiang/nginx-test:lastest
- 登录docker
docker login
- 上传
nginx-test
镜像
docker push wcjiang/nginx-test:lastest
# The push refers to a repository [docker.io/wcjiang/nginx-test]
# 2f5c6a3c22e3: Mounted from wcjiang/nginx
# cf516324493c: Mounted from wcjiang/nginx
# lastest: digest: sha256:73ae804b2c60327d1269aa387cf782f664bc91da3180d10dbd49027d7adaa789 size: 736
镜像中安装软件
通常情况下,使用docker官方镜像,如 mysql镜像,默认情况下镜像中啥软件也没有,通过下面命令安装你所需要的软件:
# 第一次需要运行这个命令,确保源的索引是最新的
# 同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引
apt-get update
# 做过上面更新同步之后,可以运行下面的命令了
apt-get install vim
如果你安装了CentOS或者Ubuntu系统可以进入系统安装相关软件
# 进入到centos7镜像系统
docker run -i -t centos:7 /bin/bash
yum update
yum install vim