1.列出所有容器

ps -[a] [l]
    -a:查看所有运行过的容器
    -l:查看最近创建的一个容器
    -q:只显示容器的编号
docker ps -aq   #显示当前所有容器的编号

2.运行容器

Docker run -it --name demo   xxxx
    --name 指定容器名称
    -i代表  iteractive(交互式的,相互作用的) 
    -t代表 开启tty终端
    -P将容器暴露的所有端口映射(随机指定)
    -p指定映射的端口  
        - docker run -p 80 -it ubantu /bin/bash 只指定容器端口,宿主机端口随机映射
        - docker run -p 8080:80 -it ubantu /bin/bash 同时指定宿主机和容器端口 宿主机端口和容器端口绑定
        - docker run -p 0.0.0.0:80 -it ubantu /bin/bash 指定ip和容器端口
        - docker run -p 0.0.0.0:8080:80 -it ubantu /bin/bash 指定ip,宿主机端口和容器端口

-it 使用交互方式运行,进入容器查看内容
docker run -d demo   以守护进程形式启动容器
docker run -d centos:7 /bin/sh  -c "while true; do echo hello world!;sleep 1; done;"  #  -c 指定命令 

# docker run -d [镜像名]
docker run -d centos #问题:docker ps 可以观察到 centos停止了
docker容器使用后台运行,必须一个前台进程,docker发现没有应用,就会停止运行

3.退出容器

exit #直接停止容器并退出
Ctrl+p+q #容器不停止,退出
Ctrl P+Ctrl Q  以后台形式运行容器.      

4.查看镜像

docker images [-a]  [-f] [--no-trunc] [-q]
            -f:过滤条件
            --no-trunc:不截断唯一ID,默认截断
            -q:只显示唯一ID
    
docker images ubantu 查看ubantu仓库下的所有镜像

5.删除镜像

关于删除镜像:
1.需要先docker ps -a 查看正在运行和已经关闭的container,必须先删除container
2.docker rm [容器ID] 删除容器(只能删除已经停止的容器)     
3.docker rmi [镜像ID] 删除镜像

docker rmi ubantu:12.04  ubantu:precise   删除多个镜像
docker rmi $(docker images ubantu -q)   删除ubantu仓库下的所有镜像

6.删除容器

docker rm 容器id #删除指定容器
docker rm -f $(docker ps -aq) #删除所有容器
docker ps -aq | xargs docker rm #删除所有容器

7.启动和停止容器

#备注:start/stop/kill 后可以用容器id或是容器name
docker start [-i] demo 重新启动已经停止的容器
docker stop demo 停止容器
docker kill demo 强制停止容器
docker restart [容器id] #重启容器

8.查看日志

docker logs -tf --tail 10 demo 查看容器日志 -t显示时间戳 -f持续刷新 --tail 只显示最新的10条

9.查看容器中进程信息

docker top demo 查看容器内进程情况
docker port demo 查看容器端口绑定情况
Docker inspect [容器名称/镜像ID] 检查容器/镜像(相关配置信息)

10.进入当前正在运行的容器

docker exec -it demo /bin/bash 在容器内以交互式启动新进程 ag: docker exec demo nginx 在demo容器中启动nginx服务
docker attach [容器id] 重新进入后台运行的容器,使用正在执行的终端,不会启动新的终端
docker exec # 进入容器后开启一个新的终端,可以在里面进行操作

11.从容器中拷贝文件到主机

docker cp 容器id:容器内路径 目的地主机路径
# docker cp 33862d00fce0:/home /home
注意:如果要将宿主机文件"拷贝"到容器,一般使用挂载

13.安装es

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms256m -Xmx256m" elasticsearch

docker stats #显示容器使用的系统资源

14.安装mysql

docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql mysql:5.7
将mysql 配置文件挂载到宿主机,并且将mysql数据文件挂载到宿主机。使用-v 可以挂载多个文件

15.思考

每次改动nginx配置文件,都需要进入容器内部。是否可以在容器外部提供一个映射路径,达到在容器外部修改配置文件,容器内部同时变更。

这种场景使用容器卷技术可以完美解决。