docker使用手册
一、安装Docker
- 基础
在电脑上安装VMware并安装centos7 - 换yum源
因为centos的yum源是国外的镜像仓库,一般多比较慢,或者连不上,所以将yum源换成国内阿里的(或者其他)。参考:阿里官方切换Yum源教程 。
如果切换yum源之后还是不能通过yum下载(比如一值ERROR12,ERROR14),那可能是网络问题,换成自己手机热点或者其他的网络试试(有时候网络问题虽然可以ping通mirrors.aliyun.com但还是yum安装出现问题,作者本人的血泪经历) - 安装yum源
[root@linux-node1 ~]# cd /etc/yum.repos.d/
[root@linux-node1 yum.repos.d]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 下载docker
yum install docker-ce
docker分企业版(EE)和社区版(CE),社区版免费,企业版收钱,两个版本更新速度不一样。
- 启动docker
systemctl start docker
二、Docker相关命令
1、镜像
- docker pull:从dockerhub查找镜像
[root@k8s-master ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL<是否为docker官方发布> AUTOMATED
centos The official build of CentOS. 6789 [OK]
- 查看镜像
docker image - 拉取镜像
docker pull - 将镜像做成离线压缩包/解压离线压缩包:
save/load
docker save -o centos.tar.gz centos
docker load -i centos.tar.gz
2、容器相关操作
- 创建容器并启动
docker run
创建的容器在前台执行
docker run centos<镜像名称> /bin/echo 'HE' <要在容器执行的指令>
创建并进入容器内部: -it
[root@linux-node1 ~]#docker run --name mydocker -it centos /bin/bash
[root@1b0cae722fa0 /]#
让容器后台运行
[root@linux-node1 ~]# docker run -d --name mydocker2 centos /bin/bash
容器已经创建但是未启动
[root@linux-node2 maiyp]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20273b3451bf centos "/bin/bash" 9 hours ago Exited (0) 3 seconds ago mypdocker
[root@linux-node2 maiyp]# docker start mypdocker
mypdocker
[root@linux-node2 maiyp]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20273b3451bf centos "/bin/bash" 9 hours ago Up 19 seconds mypdocker
- 进入容器
attach
进入容器时,如果多个终端同时attach到同一个容器,所有的终端都会同步显示
docker attach mydocker
nsenter
使用nsenter可以访问另一个进程的名字空间
先获取容器的第一个进程的PID,然后通过PID进入容器
PID=$( docker inspect --format "{
{ .State.Pid }}" <容器名或ID>) )
#如果容器没有启动,PID为0
nsenter --target $PID --mount --uts --ipc --net --pid
通过脚本进入容器
[root@linux-node2 maiyp]# cat docker_in.sh
#!/bin/bash
docker_in(){
docker_nm=$1
docker_pid=$( docker inspect --format "{
{ .State.Pid }}" $docker_nm)
if [ $docker_pid -eq 0 ]
then
echo "the docker is not starting!"
exit -1
fi
nsenter --target $docker_pid --mount --uts --ipc --net --pid
}
docker_in $1
[root@linux-node2 maiyp]# ./docker_in.sh mypdocker
[root@20273b3451bf /]#
#主机名为容器ID前几位
通过exec进入容器
[root@linux-node1 ~]# docker exec mydocker whoami
root
#不进入容器执行命令
[root@linux-node2 maiyp]# docker exec -it mypdocker /bin/bash
[root@20273b3451bf /]#
#进入容器执行命令
使用docker exec、nsenter进入容器后,执行exit退出容器,容器并不会关闭。但是使用docker attach进入容器,输入exit退出容器后,容器也会自动终止。因为除了attach,nsenter和exec实际中都是开了一个新的shell在执行。而attach是使用容器本身启动的/bin/bash,这个shell环境退出了。那么容器就自动退出了。
- 将容器做成离线压缩包/解压离线压缩包
export/import
docker export -o centos.tar centos(container)
docker import centos.tar centos
三、Dockerfile
(1)FROM
基础镜像,必须是可以下载下来的,定制的镜像都是基于 FROM 的镜像,这里的 centos就是定制需要的基础镜像。
(2)MAINTAINER
指定镜像的作者信息
(3)RUN
指定在当前镜像构建过程中要运行的命令
包含两种模式
1、Shell
RUN (shell模式,这个是最常用的,需要记住)
RUN echo hello
2、exec模式
RUN “executable”,“param1”,“param2”
RUN [“/bin/bash”,”-c”,”echo hello”]
等价于/bin/bash -c echo hello
(4)EXPOSE指令<