#------------------------------------------------------------

# 运行容器

#------------------------------------------------------------


# 运行docker

# -it表示前端运行

docker run -it --restart=always centos /bin/bash

# 后端运行并映射80端口

docker run -dt -p 80:80 --restart=always --name mycentos my/os

# 端口映射,IP访问限制

docker run -dt -p 127.0.0.1:80:80 --restart=always --name mycentos my/os

# 不创建Container运行docker

docker run --rm -it centos /bin/echo haha

# 创建Container,起个名字

docker run -it --name testecho --restart=always -b centos /bin/bash

# 重命名p_w_picpath

docker tag p_w_picpath_name new_p_w_picpath_nameL:tag

# 运行centos的终端

docker run -it centos --restart=always  /bin/bash

# Container重命名

docker rename nginx nginx_1

#进入容器(调出容器的bash)

docker exec -it container-name /bin/bash


#------------------------------------------------------------

# 退出

#------------------------------------------------------------


# attach(附加)的容器退出时会停止Container

exit

# 不停止Container情况下退出方法

快捷键:ctrl + p, ctrl + q


*exec方式调用容器bash的方式敲exit命令只是推出shell不会停止容器


#------------------------------------------------------------

# 运行Container

#------------------------------------------------------------


# 运行已经退出的docker centos终端

docker start 0a2b06b59448或者container-name

# 运行并附加到container

docker start -i ContainerID

# 停止正在运行的docker centos终端

docker stop 0a2b06b59448

# 附加到docker终端Container,前提是此Container已经运行中

docker attach 3b6165b7504a

# 列出所有的Container

docker ps -a

# 打印docker的运行终端显示

docker logs 81a4f43c74ed

# 删除Container

docker rm 3b6165b7504a

# 删除所有Container

docker rm $(docker ps -a)

# 列出所有镜像

docker p_w_picpaths

# 搜索镜像

docker search centos

# 下载镜像

docker pull centos

# 提交镜像

docker commit mycentos my/os:latest


#------------------------------------------------------------

# 镜像导入导出及运行

#------------------------------------------------------------


# 导入容器为镜像文件

docker export 3b6165b7504a > centos.tar

# 导入镜像

cat centos.tar | docker import - test/centos:v1.0

# 运行导入的镜像

docker run -it test/centos:v1.0 /bin/bash

# 删除镜像

docker rmi test/centos:v1.0

# 查看docker的信息,包括安装路径、CPU、内存等

docker info

# Container执行命令,进入容器终端

docker exec -it ContainerID bash

# 进入容器终端

nsenter --mount --uts --ipc --net --pid --target $(docker inspect --format "``.`State`.`Pid`""4cd5af004a52")

# 查看Container的端口映射

docker port ContainerID


#------------------------------------------------------------

# 动态设置运行时的环境变量# 使用参数--env

# 查看Container的环境变量方法,可以进入Container的bash中运行命令:env

#------------------------------------------------------------


# 查看Container的环境变量

docker exec -it nginx env

# 查看Container的Host文件

docker exec -it nginx cat /etc/hosts

# 设置Container的环境变量

docker run --rm -it --name test --env MYHOME=/home --env TEST=/home --env PATH=$PATH:/home centos bash

# 也可以使用inspect查看Container的环境变量

docker inspect nginx


#------------------------------------------------------------

# 端口映射,IP访问限制

#------------------------------------------------------------


docker run -dt -p 127.0.0.1:90:80 --name jetty img_jetty

docker run -dt -p 127.0.0.1:91:80 --name jetty1 img_jetty

docker run -dt -p 80:80 --name nginx --link jetty:java --link jetty1:java1 img_nginx


#------------------------------------------------------------

# 镜像保存与重加载

#------------------------------------------------------------


# 保存镜像

docker save img_java > img_java.tar

# 重新加载镜像

docker load < img_java.tar

# 查询镜像历史

docker history img_java

# 查看镜像信息Json

docker inspect img_java


#------------------------------------------------------------

# 文件复制

#------------------------------------------------------------


# 从Container复制文件autorun.sh到Host主机的/home目录下

# 也可以是目录复制

docker cp test:/etc/init.d/autorun.sh /home

# 从Host主机复制文件或文件夹到Container主机

# 使用scp命令,如果没有安装scp,使用

yum install openssh-clients

# 首先需要使用docker exec进入到Container的终端

scp -rp root@192.168.0.35:/home/jetty8/* /home/


#------------------------------------------------------------

# docker容器自动启动

#------------------------------------------------------------


docker run --restart=always redis

#------------------------------------------------------------

# 挂载数据卷

# 参数

privileged=true:意思给容器添加特权,比如对挂载卷的读写

# 挂载多个数据卷,可以使用多次-v

#------------------------------------------------------------

# 创建数据卷容器,并挂载目录

docker run -it --privileged=true -v /home/jetty8:/home/jetty8 --name jetty centos bash

# 使用数据卷容器创建新的数据卷容器

docker run -it --privileged=true --volumes-from jetty --name os centos bash


#------------------------------------------------------------

# 使用Dockerfile制作镜像

#------------------------------------------------------------


# 注意后面的一点不可少:

.docker build -f dockerfile -t my/centos