docker全解

基本概念

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

组件

image(镜像)
container(容器)
repository(仓库)

安装docker

[root@hjy ~]# yum -y install docker     #安装docker
[root@hjy ~]# systemctl start docker    #启动docker
[root@hjy ~]# systemctl status docker   #查看docker的状态

镜像操作

下载,导入,保存

[root@hjy ~]# docker pull centos:7   #下载网上的镜像
[root@hjy ~]# docker load --input centos.tar   #导入镜像
[root@hjy ~]# docker save -o centos:7 centos   #保存镜像

查看镜像等

[root@hjy ~]# docker images   #查看镜像列表
[root@hjy ~]# docker rmi ff426288ea90  删除镜像
[root@hjy ~]# docker ps -a  #查看docker运行过的进程

容器操作

基本操作

[root@hjy ~]# docker run --name mydocker -t -i centos "/bin/bash" #创建一个容器,伪终端,打开标准输入
[root@hjy ~]# docker start mydocker  #启动停止的容器
[root@hjy ~]# docker stop mydocker  #停止启动的容器
[root@hjy ~]# docker attach mydocker  #进入容器mydocker


[root@hjy ~]# docker inspect -f "{{ .State.Pid }}" mydocker  #获取进程的pid
[root@hjy ~]# nsenter -t 14799 -m -u -i -n -p  #进入容器里面

[root@hjy ~]# docker exec mydocker "whoami"  #不进入容器执行命令
[root@hjy ~]# docker run -d nginx   #把容器运行在后台
[root@hjy ~]# docker kill $(docker ps -a -q)   #杀死所有容器

docker命令详解

    --help  #帮助
    run     #创建容器
        --rm        #运行完后删除容器
    start       #开始一个容器
    stop        #停止一个容器
    kill        #杀死容器
    pull        #推入镜像仓库
    load        #加载镜像
    save        #保存镜像
    images  #列表出所有镜像
    rmi     #删除镜像
    rm      #删除容器,强制删除使用-f
    attach  #进入一个运行的容器
    inspect #查看容器运行的pid
    exec        #不进入容器执行命令
    port        #查看端口映射
    ps      #查看容器运行的容器
            -a  是所有的容器,不加-a是显示运行的容器
            -q  显示容器的id
    --name  #运行容器的别名
    --input #导入的文件名
    -t      #打开一个伪终端
    -i      #打开标准输入
    -o      #打开标准输出
    -d      #把容器运行在后台,并输出id
    -m      #创建镜像时的描述
    -p      #随机映射端口
            -p hostPort:containerPort  #指定端口映射
            -p ip:hostPort:containerPort  #指定ip和端口映射
            -p ip::containerPort  #指定ip映射
            -p hostPort:containerPort:udp  #指定端口映射到协议端口
    -v      #挂载数据卷,-v src:dst

nsenter命令详解

    --help  帮助
    -t      #运行容器的pid
    -m      #mnt
    -i      #ipc
    -n      #net
    -u      #uts
    -p      #pid

进入docker脚本(推荐)

[root@hjy ~]# cat docker_in.sh 
#!/bin/bash

#Use nsenter to access docker

docker_in(){
    NAME_ID=$1
    PID=$(docker inspect -f "{{ .State.Pid }}" $NAME_ID)
    nsenter -t $PID -m -u -i -n -p
}

docker_in $1

常见功能

1端口映射

[root@hjy ~]# docker run -d -P nginx #启动nginx容器,并随机映射端口
[root@hjy ~]# docker run -d -p 192.168.1.30:80:80 --name mynginx nginx
[root@hjy ~]# docker port mynginx   #查看端口映射

2docker挂载宿主机的文件

[root@hjy ~]# docker run --rm -it -v /root/.bash_history:/.bash_history nginx /bin/bash   
#挂载本地/root/.bash_history文件到docker的/.bash_history上

3docker挂载逻辑卷

[root@hjy ~]# docker run -d --name volume-test1 -v /data/docker-volume-nginx/:/data nginx  
#挂载本地目录/data/docker-volume-nginx/到docker上/data

[root@hjy ~]# docker run -it --name volume-test50 --volumes-from volume-test1 centos /bin/bash  
#挂载上面volume-test1的逻辑卷,只能读不能写,volume-test1停止了也能用

4自定义docker镜像

[root@hjy ~]# docker commit -m "My Nginx" 9e6cfa230c67 hjy/mynginx:v1   
#自己创建镜像,hjy是仓库名,mynginx是镜像名,v1是版本,9e6cfa230c67是容器的id,通过容器创建镜像

[root@hjy ~]# docker run --name mynginxv1 -d -p 81:80 hjy/mynginx:v1 nginx   
#启动自定义的容器

你可能感兴趣的:(docker全解)