常用命令

# 从公网拉取一个镜像
docker pull images_name

# 查看已有的docker镜像
docker images

# 查看帮助
docker command --help

# 启动一个容器
docker run hello-world

# 导出镜像
docker save -o image_name.tar image_name

# 删除镜像
docker rim image_name

# 启动一个容器并进入该容器
docker run -it --name=con_name images

# 创建一个容器,放入后台运行,把物理机80端口映射到容器的80端口
# -p 参数说明
#-p hostPort:containerPort
#-p ip:hostPort:containerPort
#-p ip::containerPort
#-p hostPort:containerPort:udp
docker run -d -p 81:80 image_name

# 看容器的端口映射情况
docker port con_id

# 查看正在运行的容器
docker ps

# 查看所有的容器
docker ps -a

# 动态查看容器日志
docker logs -f con_name

# 进入容器
docker attach con_name

# 退出容器
exit
#一起按,注意顺序,退出后容器依然保持启动状态
ctrl+p && ctrl+q ()


# 删除容器
# 强制删除需要加-f,不加-f不能删除正在运行中的容器,非常危险,最好不用
docker rm  con_name

#查看docker网络
docker network ls

# 进入容器
docker attach 775c7c9ee1e1
docker exec -it 775c7c9ee1e1 /bin/bash 


# 上传文件
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
docker cp /root/test.txt ecef8319d2c8:/root/

# 下载链接
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp ecef8319d2c8:/root/test.txt /root/


docker 创建固定ip的容器

docker安装后,默认会创建下面三种类型的网络,而启动容器的时候,用--network参数可以指定网络类型。默认情况下启动的docker容器,都是使用bridge桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了。

docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
// 桥接网络
344af693dee1        bridge              bridge              local
// 主机网络
de666e900e5d        host                host                local
// 无指定网络
1b9b4d0a48a4        none                null                local


docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:latest /bin/bash



## 创建自定义网络
docker network create --subnet=172.18.0.0/16 mynetwork
➜ ~ docker network ls
NETWORK ID     NAME        DRIVER       SCOPE
9781b1f585ae    bridge       bridge       local
1252da701e55    host        host        local
4f11ae9c85de    mynetwork      bridge       local
237ea3d5cfbf    none        null        local

docker run -itd --name networkTest1 --net mynetwork --ip 172.18.0.2 centos:latest /bin/bash

docker容器的DNS和主机名

同一个docker镜像可以启动很多容器,它们的主机名并不一样,可知主机名并不是写入镜像中,实际上容器中/etc目录下有三个文件是容器启动后被虚拟文件覆盖掉的,分别是/etc/hostname 、/etc/hosts 、/etc/resolv.conf通过在容器中运行mount命令可以查看。这种能解决主机名的问题,同时也能让DNS及时更新.由于这些文件的维护方法随着docker版本演进而不断变化,因此尽量不修改这些文件,而是通过docker提供的参数进行相关设置

# 设置容器的主机名
-h HOSTNAME 或者 --hostname=HOSTNAME

--dns=IP_ADDRESS
为容器配置DNS,写在/etc/resolv.conf中

备份与回复

都是5G的传输速度达到GB级别,但是万恶的现实总是那么cool。因此到备份到磁盘还是必须的。docker提供了相应的导入到处命令

# 从镜像备份
docker save [options] images [images...]

# 如下俩条命令是等价的。将镜像nginx:latest导出到nginx.tar文件中
docker save -o nginx.tar nginx:latest
docker save > nginx.tar nginx:latest

# 如下俩条命令是等价的。将备份文件导入
docker load -i nginx.tar
docker load < nginx.tar

# 从容器导入导出
docker export -o nginx-test.tar nginx-test 
docker import nginx-test.tar nginx:imp

常用命令

### 启动固定主机名固定主机IP的容器
## 通过-h参数指定主机名
## 通过——name指定容器名
## 通过--network指定网络
## 通过-p指定端口映射
## http://hadoop01:8088
## http://hadoop01:50070
docker run -d -h hadoop01 --name hadoop01 --network=dockernet --ip 135.191.1.100  centos:hadoop /run.sh

# Start docker daemon
docker -d

# start a container with an interactive shell
docker run -ti <image_name> /bin/bash

# "shell" into a running container (docker-1.3+)
docker exec -ti <container_name> bash

# inspect a running container
docker inspect <container_name> (or <container_id>)

# Get the process ID for a container
# Source: https://github.com/jpetazzo/nsenter
docker inspect --format {{.State.Pid}} <container_name_or_ID>

# List the current mounted volumes for a container (and pretty print)
# Source:
# http://nathanleclaire.com/blog/2014/07/12/10-docker-tips-and-tricks-that-will-make-you-sing-a-whale-song-of-joy/
docker inspect --format='{{json .Volumes}}' <container_id> | python -mjson.tool

# Copy files/folders between a container and your host
docker cp foo.txt mycontainer:/foo.txt

# list currently running containers
docker ps

# list all containers
docker ps -a

# list all images
docker images