Docker相关指令及镜像与容器
- docker的常用命令
- 镜像相关的指令
- 容器相关指令
- 容器保存
- docker镜像和容器的理解
docker的常用命令
直接使用docker指令可以看到docker的所有指令。
- 重启docker服务 sudo service docker restart
- 关闭docker服务 sudo service docker stop
- 开启docker服务 sudo service docker start
镜像相关的指令
列出当前镜像
下面两种都可以
sudo docker image ls
sudo docker images
拉取远程仓库
sudo docker image pull 镜像名称
删除镜像
加上-f 是强制删除
sudo image rm 镜像名称或id
sudo docker rmi -f 镜像名称或id
容器相关指令
列出正在运行的容器
两种方法
sudo docker container ls
sudo docker ps
列出所有容器
两种方法
sudo docker container ls --all
sudo docker ps -a
删除容器
这用id删,还可用名字删除
sudo docker container rm 12121654646
sudo docker container rm -f 12121654646 #强制删除
**注:**不能够删除一个正在运行的容器,会报错。需要先停止容器。
开启容器
用id开启
sudo docker container start 12121654646
关闭容器
用id关闭
sudo docker container stop 12121654646
进入容器并执行操作
sudo docker exec -it d7f2b2d58ee4 /bin/bash
利用镜像创建容器
sudo docker run[相关参数]镜像 [向容器中执行的命令]
#例 sudo docker run ubuntu:14.04 /bin/echo ‘hello world’
注意这里不能使用立即就停止运行的程序,否则会立马关闭容器
取名并运行
sudo docker run -it --name=myubuntu ubuntu /bin/bash
守护容器
docker run -dit --name=rong2 ubuntu
–dit会运行并启动然后一直保存除非你手动退出
注:-i表示让容器的标准输入打开,-t表示分配一个伪终端,-d表示后台启动,要把-i -t -d 放到镜像名字前面,–name指定容器名。
如果使用systemctl启动服务需要用下面的方式以超级权限启动,否则会报Failed to get D-Bus connection: Operation not permitted错误:
进入后台运行的容器:docker exec -it containname /bin/bash
启动容器:docker start containername
停止容器:docker stop containername
停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q)
如果想要删除所有container的话再加一个指令: docker rm $(docker ps -a -q)
注:-a标志列出所有容器,-q标志只列出容器的ID,然后传递给rm命令
重命名一个容器:docker rename old_name new_name
要获取所有容器名称及其IP地址:
docker inspect -f ‘{{.Name}} - {{.NetworkSettings.IPAddress }}’ $(docker ps -aq)
进入容器内部后可以使用下面命令获取目前容器的ip:
cat /etc/hosts
在docker容器和宿主机之间复制文件:
切换为root用户然后:
从主机复制到容器 docker cp host_path containerID:container_path
从容器复制到主机 docker cp containerID:container_path host_path
容器保存
容器保存为镜像
sudo docker commit 容器名 镜像名
把镜像保存到本地文件
sudo docker save -o 镜像.tar myimage
本地文件(这里指镜像.tar)可以不指定格式,都是生成tar格式
加载本地镜像文件
docker load -i 本地镜像名
docker镜像和容器的理解
先查看下所有的镜像,```
tag就是版本可以指定
镜像所在仓库名称 镜像标签 镜像id 创建时间 大小
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 2c5e00d77a67 5 weeks ago 188MB
delron/fastdfs latest 8487e86fc6ee 14 months ago 464MB
容器 = 镜像 + 读写层
下面介绍一下创建一个容器的过程。
镜像是静态的,镜像的每一层都只是可读的,而容器是动态的里面运行着我们指定的应用,容器里面的应用可能会新建一个文件,修改一个目录,这些操作所带来的改变并不会作用到镜像里面,因为镜像只是可读的。所以通过镜像创建容器就是在镜像上加一个可读写的层。下面的图引用自docker docs,ID上有些不同。
一个镜像可创建多个容器,每个容器都有各自的一个可读写层,这些层相互独立共享下面的镜像