查看docker 版本
docker version
查看docker 状态
docker info
从Docker Hub搜索某个image
docker search XXX
运行Docker官方的的基础镜像Alpine(取代了busybox):
docker run alpine
docker 在运行alpine之后就立即退出了,这是因为docker container会随着container中的主进程的退出而退出,即便我们使用了-d参数运行在detatched模式下也是如此。
启动并进入container:
docker run -it alpine sh
-it
表示在交互方式下运行contianer,并分配一个命令行终端给container,sh
表示在container中运行sh为其主进程,这里的sh
会替代Dockerfile中的CMD。
查看正在运行的container
docker container ls //新方式
docker ps //老方式
查看所有的contianer(包含正在运行的和已经停止的)
docker container ls -a //新方式
docker ps -a //老方式
清理整个docker的无用数据
docker system prune -a
默认情况下该命令不会清除volume(好主意),如果要同时清除无用的volume:
docker system prune --volumes
删除所有停止掉的container
docker container prune
退出container之后,自动删除container
docker run --rm alpine
在后台运行container(detatched模式)
docker -it -d alpine sh
-d
表示detatched模式,即不连接cotainer的标准输入输出,而attached模式会连接标准输入输出。需要注意的是,attached模式并不指登录到container中,但是如果container的主进程正式bash之类的命令行,那么attach便会连接到bash本身的输入输出,也即像登录到了container一样,但是此时运行exit
会退出整个container。
登录到运行的container中
docker exec -it 97aae54c2fac sh
97aae54c2fac
表示container的id,也可以使用container的name,此时运行exit
不会退出container本身。
重新运行已停止的container
docker container start 97aae54c2fac
97aae54c2fac
可以用container的id或者name,docker container start
会采用所有在首次运行contianer时候的参数,包含volume、环境变量和运行等。另外,在模式情况下,docker contianer start
总会在detatched模式下运行contianer。
网络端口映射
docker run -p 4000:3000 alpine
将contianer的3000端口映射到宿主机的4000端口。
文件夹映射
docker run -v /path-on-host:/path-in-container alpine
指定环境变量
docker run -e MY_ENV=some_value alpine
删除container
docker container rm container_id //新方式
docker rm container_id//老方式
以上命令只删除已经停止的container,如果要强制删除container,可以通过-f
参数指定。
删除image
docker image rm image_id //新方式
docker rmi image_id //老方式
指定container的名称
docker run --name container_name alpine
停止container
docker stop container_id (or container_name)
列出正在运行的container
docker container ls //老方式
docker ps //老方式
link两个container
docker run -it --link source-container:alias alpine sh
link之后,在contianer的/etc/hosts中会多一条DNS解析到源container的ip,dns名则为alias,另外源contianer中的设置也将作为环境变量出现在所启动的container中。
查看所有的image
docker image ls //新方式
docker images //老方式
删除所有没用到的image
docker image prune -a
获取image
从Docker Hub中获取标有latest的官方image:
docker pull nginx
从Docker Hub 获取指定tag的官方image:
docker pull nignx:tag1
从Docker Hub中获取某个用户下的image:
docker pull username/repository:tag
从私有registry中获取image:
docker pull registry-host:5000/respository:tag
从Dockerfile构建image
docker build -t repository:tag .
请确保当前目录下存在名为Dockerfile的文件。
登录到Docker Hub
docker login
登录到私有Docker Registry
docker login host:port
上传Image
上传image到Docker Hub
docker push username/repository:tag
上传到私有Docker Registry:
docker push registry-host:5000/username/repository
Image和Container的文件系统
Docker采用分层的文件系统,即Image中的每一层都是不可变,而Container在Image的基础上,添加了一层可读写的层,并使用Copy-On-Write的方式完成对文件系统的修改, 这样对文件系统的修改将会作为一个新的层添加到既有层之上,而不是直接修改既有的层。
给image打tag
通过Image ID打tag:
docker tag f2a91732366c mynewtag
通过Image名称打tag:
docker tag image-name newtag
,光是image名称还不能唯一确定一个image,因此此时会默认使用image-name:latest所指向的image。通过Image名称和Tag打tag:
docker tag image-name:tag newname:newtag
为私有Registry打tag
docker tag f2a91732366c myregistry:5000/username/repository:tag
Docker中的tag有些歧义,比如我们在运行docker tag
命令的时候,其实可以同时修改Repository的名字和TAG的名字,这里的Repository也即image的名称。
设置container的工作路径
docker run -it -w /home alpine sh
使用-w
设置container中的工作路径。