1.docker环境搭建
官方手册网站 https://docs.docker.com/engine/install/centos/
1.安装必要的一些系统工具[root@node1-61 ~]# yum install -y yum-utils device-mapper-persistent-data lvm22.添加软件源信息[root@node1-61 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo[root@node1-61 ~]# yum repolist[root@node1-61 ~]# yum -y install docker-ce //ce社区版。ee企业版[root@node1-61 ~]# systemctl enable docker[root@node1-61 ~]# systemctl start docker[root@node1-61 ~]# docker version
2.配置阿里云镜像加速器
[root@docker1-60 yum.repos.d]# mkdir -p /etc/docker
[root@docker1-60 yum.repos.d]# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://rbuy3ojl.mirror.aliyuncs.com"]
> }
> EOF
{
"registry-mirrors": ["https://rbuy3ojl.mirror.aliyuncs.com"]
}
[root@docker1-60 yum.repos.d]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://rbuy3ojl.mirror.aliyuncs.com"]
}
[root@docker1-60 yum.repos.d]# systemctl daemon-reload
[root@docker1-60 yum.repos.d]# systemctl restart docker
3.docker和vm比较
4.docker常用命令
帮助命令
帮助文档 https://docs.docker.com/reference/
docker version #显示版本
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令
镜像命令
[root@docker1-60 ~]# docker image ls #查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 9 months ago 13.3kB
[root@docker1-60 ~]# docker image ls --help
Usage: docker image ls [OPTIONS] [REPOSITORY[:TAG]]
List images
Aliases:
ls, images, list
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show numeric IDs
[root@docker1-60 ~]# docker pull mysql:5.7 #下载

删除镜像 docker rmi
[root@docker1-60 ~]# docker rmi 镜像id #删除指定的镜像
[root@docker1-60 ~]# docker rmi 镜像id 容器id 容器id #删除多个镜像
[root@docker1-60 ~]# docker rmi $(docker images -aq) #删除全部镜像
容器命令
说明,下载一个centos镜像学习
[root@docker1-60 ~]# docker pull centos:centos7.5.1804
新建容器并启动
docker run [可选参数] image
#参数说明
--name="Name" 容器名字,mysql01,mysql02,用来区分容器
-d 后台运行
-it 使用交互式方式,进入容器查看内容
-p 指定容器端口, -p 3306:3306
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
-P 随机指定端口
#测试,启动容器并进入容器
[root@docker1-60 ~]# docker run -it centos:centos7.5.1804 /bin/bash
[root@66c3b9221cb2 /]# ls #查看容器内的centos,基础版本,很多命令没有
bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@66c3b9221cb2 /]#
#从容器退回到本机
[root@66c3b9221cb2 /]# exit |ctrl + d #退出后容器会关闭
exit
[root@docker1-60 ~]# ls
anaconda-ks.cfg
docker pull //下载镜像
docker push //上传镜像
docker image ls //镜像查看
docker histroy nginx //查看镜像制作历史
docker inspect nginx //查看镜像底层信息(可以看镜像,容器,交换机)
docker ps //查看运行中的docker
docker ps -a //查看所有docker
docker rmi nginx //nginx为镜像名
docker stop|start|restart 0f //0f为容器ID
docker exec|attach -it 76 /bin/bash // 进入容器
列出运行的容器
# docker ps
#列出正在运行的容器
-a #列出所有容器(all)
-n=? #显示最近创建的容器
-q #只显示容器的编号
[root@docker1-60 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b2485947f60c centos:centos7.5.1804 "/bin/bash" 11 seconds ago Up 10 seconds goofy_kirch
[root@docker1-60 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b2485947f60c centos:centos7.5.1804 "/bin/bash" 17 seconds ago Up 16 seconds goofy_kirch
66c3b9221cb2 centos:centos7.5.1804 "/bin/bash" 8 minutes ago Exited (0) 5 minutes ago elastic_boyd
退出容器
exit #退出容器,同时容器停止
ctrl + p + q #不停止容器退出
删除容器
docer rm 容器id #删除指定的容器,但不能删除正在运行的容器,如果要删需要加 -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -aq | xargs docker rm #删除所有的容器
启动和停止容器的操作
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
5.其他命令
后台启动容器
# 命令 docker run -d 镜像名
[root@docker1-60 ~]# docker run -d centos:centos7.5.1804
3347083acd4a033720d560c7d0dd9fd30c6b5dc741e1bd191e86f850498e49b4
# 问题 docker ps ,发现centos停止了
#常见的坑,docke 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx,容器启动后发此自己没有提供服务,就会立刻停止,就没有程序了
[root@docker1-60 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker1-60 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3347083acd4a centos:centos7.5.1804 "/bin/bash" 27 seconds ago Exited (0) 26 seconds ago hopeful_ishizaka
查看日志
docker logs -f -t --tail 容器,没有日志
# 自己编写一段shell脚本
[root@docker1-60 ~]# docker run -itd centos:centos7.5.1804 bash -c "while true;do echo 123 ;sleep 2; done"
c6bdb149fa9dce4e052679200d704278b281df07beae17f542938b47514ab87f
# 显示日志
-tf #显示日志
--tail number # 要显示的日志条数
[root@docker1-60 ~]# docker logs -tf --tail 10 c6bd
2020-10-07T05:02:57.173587582Z 123
2020-10-07T05:02:59.176738935Z 123
查看容器中进程信息和元数据 ps
# 命令 docker top 容器id
[root@docker1-60 ~]# docker top C6
Error response from daemon: No such container: C6
[root@docker1-60 ~]# docker top c
UID PID PPID C STIME TTY TIME CMD
root 7123 7105 0 13:01 pts/0 00:00:00 bash -c while true;do echo 123 ;sleep 2; done
root 8012 7123 0 13:26 pts/0 00:00:00 sleep 2
# 命令 docker inspect 容器id
[root@docker1-60 ~]# docker inspect c6
进入当前正在运行的容器
# 我们通常容器都是后台运行的,需要进入容器,修改一些配置
# 方式1
# 命令
docker exec -it 容器 id bashshell
#测试
[root@docker1-60 ~]# docker exec -it c6 /bin/bash
[root@c6bdb149fa9d /]# ls
bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@c6bdb149fa9d /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 05:01 pts/0 00:00:00 bash -c while true;do echo 123 ;sleep 2; done
root 998 0 0 05:34 pts/1 00:00:00 /bin/bash
root 1022 1 0 05:34 pts/0 00:00:00 sleep 2
root 1023 998 0 05:34 pts/1 00:00:00 ps -ef
# 方式2
docker attach 容器id 进入容器
小结
docker run -it -p 80:80 -v /var/nginx/html:/usr/share/nginx/html/ docker.io/nginx:latest
docker run —network=docker1 -itd -p 82:80 -v /data:/var/www/html docker.io/myhttpd:v1
编写Dockerfile
Dockerfile语法格式:
– FROM:基础镜像
– MAINTAINER:镜像创建者信息(说明)
– EXPOSE:开放的端口
– ENV:设置环境变量
– ADD:复制文件到镜像
– RUN:制作镜像时执行的命令,可以有多个
– WORKDIR:定义容器默认工作目录
– CMD:容器启动时执行的命令,仅可以有一条CMD
FROM:
#####从头制作baseImage
FROM search
RUN: 执行命令,每执行一条run,多一个分层,一般用&&合并语句,反斜杠“\”换行
RUN yum -y update && yum -y install lrzsz \
net-tools
RUN apt-get -y update && apt-get -y install lrzsz \
net-tools
RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
WORKDIR :进入或创建目录,使用绝对路径
#####进入/root 目录
WORKDIR /root
如果目录没有会自动创建
WORKDIR /test
WORKDIR demo
//输出:/test/demo
RUN pwd
ADD 和 COPY:将本地的文件,添加到image里
//将hello 添加到根目录下
ADD hello /
//将tar包直接解压到跟目录
ADD test.tar.gz
NNV: 增加Dockerfile 的可读性
//设置常量
ENV MYSQL_MAJOR 5.5
//使用常量
$MYSQL_MAJOR
RUN apt-get -y install mysql-server="${MYSQL_MAJOR}"
CMD和ENTRYPOINT 容器启动时执行的命令,一定会执行,不会被忽略
//shell 格式
RUN apt-get -y install lrzsz
CMD echo "hello world"
ENTRYPOINT echo "hello world"
//exec 格式
RUN ["apt-get","-y","lrzsz"]
CMD ["/bin/echo","hello world"]
ENTRYPOINT ["/bin/echo", "hello world"]
]# docker build -t docker.io/myos:http Dockerfile目录
]# docker run -d docker.io/myos:http
docker网络
桥接网络
1.新建br1的网卡配置文件
[root@docker1-100 ~]# yum -y install bridge-utils //先安装依赖
]# vim /etc/sysconfig/network-scripts/ifcfg-br1
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=br1
DEVICE=br1
ONBOOT=yes
IPADDR=192.168.31.100
NETMASK=255.255.255.0
GATEWAY=192.168.31.1
]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=br1
]# systemctl restart network //可能需要reboot
]# vim /etc/sysconfig/docker-network
# /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS="-b=br1"
DOCKER_NETWORK_OPTIONS="-b=br0"
]# systemctl restart docker
]# docker run -itd --net=none --name=myhttpd docker.io/myhttpd:v1
]# pipework br1 myhttpd 192.168.31.111/24@192.168.31.1

