docker容器学习笔记 |
发表者:admin分类:云计算容器2020-04-28 14:46:55 阅读[1088] |
1. Docker的安装
1.1 yum源准备
cd /etc/yum.repos.d/
rm -rf ./*
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
yum makecache
1.2安装依赖包及docker-ce
yum install -y yum-utils device-mapper-persistent-data lvm2
yum list docker-ce.x86_64 --showduplicates | sort –r
yum install -y docker-ce
1.3启动docker
systemctl daemon-reload #服务进程
systemctl start docker
1.4测试
docker run hello-world
docker version
2. Docker卸载
yum remove docker-ce
rm -rf /var/lib/docker
3. 配置镜像加速
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hqd19v6d.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
4. Docker的镜像基础管理
4.1获取镜像
基础镜像获取
docker search centos
docker pull centos:6.9
docker pull centos:7.5.1804
docker pull nginx
4.2镜像的基本查看
docker image ls
标识镜像唯一性的方法
1.REPOSITORY:TAG
centos:7.5.1804
2.IMAGE ID
4.3镜像详细信息查看
docker image ls
docker image ls --no-trunc
docker image inspect IMAGE ID(eg: 2199b8eb8390)
docker image inspect --help #帮助查看
4.4 只查看镜像ID
docker image ls -q
4.5镜像的导入和导出
docker image save nginx >/opt/nginx.tar.gz 备注:nginx是REPOSITORY
docker image load -i /opt/nginx.tar.gz
docker image save IMAGE ID >/tmp/xx.tar
docker image load -i /tmp/xx.tar
docker image tag IMAGE ID xx:xxx 备注:加REPOSITORY和TAG标签
4.6镜像的删除
docker image rm -f IMAGE ID 备注:删除镜像 -f强制看情况添加
docker image rm –f `docker image ls -q` 备注:全部删除
5. 容器的管理
5.1交互式运行一个容器
docker run -it cf49811e3cdb
docker container ls
CONTAINER ID:容器的唯一号码
NAMES:容器的名字(可以自动,也可以手工指定)
备注:docker container run -it --name=”xf” cf49811e3cdb container可要可不要
--name=”xf”指定名字
docker rm xf 删除容器
docker container run -it --name=”xf” --rm cf49811e3cdb退出时附带删除容器
5.2查看容器状态
docker container ls #现在
docker container ls –a
docker container ls –a –q #显示所有容器的id
docker container ls –a #显示最新容器的id
docker ps #早期
docker ps -a
5.3守护式运行一个容器
docker run -d --name="zy" nginx
5.4查询容器详细信息
docker container inspect zy
5.5容器的应用场景
交互式的容器:工具类:开发,测试,临时任务
守护式容器:服务
通过端口映射提供对外服务
docker run -d -p 8080:80 --name="zy_nginx_80" nginx 输入宿主机IP:8080即可访问nginx服务
5.6容器的启动\关闭\连接
守护式容器关闭和启动
docker stop zy_nginx_80 #推荐
docker kill #暴力
docker start zy_nginx_80
交互式容器关闭和启动
docker stop centos_xf
docker start -i centos_xf
容器的连接方法
docker container attach centos_xf
子进程的方式登录(在已有容器中生成子进程,做登录,可以进行容器的调试,退出也不会影响当前容器)
docker container exec -it centos_xf /bin/bash
5.7容器的后台及前台运行
1.ctrl + P,Q
attach调用到前台
2.死循环
6.docker容器的网络访问
指定映射(docker会自动添加一条iptables规则来实现端口映射)
-p hostPort:containerPort
Eg: docker run -d -p 8080:80 --name="zy_nginx_80" nginx
-p ip:hostPort:containerPort
Eg: docker run -d -p 192.168.85.22:8081:80 --name="zy_nginx" nginx
-p ip::containerPort(随机端口)
Eg: docker run -d -p 192.168.85.22::80 --name="xf_nginx" nginx
-p hostPort:containerPort/udp
-p 81:80 –p 443:443
随机映射
docker run -p 80(随机端口)
5.8查看容器进程的情况
docker container top a1523e859360 #container可以不写
6.docker日志
docker logs [OPTIONS] CONTAINER
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m --tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m
Eg: docker logs zy_nginx
Eg: docker logs –t zy_nginx
6.1 docker cp :用于容器与主机之间的数据拷贝(手工交互数据)
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|
Eg:docker container cp zy_nginx:/usr/share/nginx/html/xx.html ./
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
Eg:docker container cp xx.html zy_nginx:/usr/share/nginx/html/
7.volume实现宿主机和容器的数据共享
mkdir –p /opt/html
docker run –d –name=”zy_nginx_1” -p 83:80 -v /opt/html:/usr/share/nginx/html nginx
8.数据卷容器
宿主机模拟数据目录mkdir -p /opt/volume/amkdir -p /opt/volume/btouch /opt/volume/a/a.txttouch /opt/volume/b/b.txt启动数据卷容器docker run -it --name "nginx_volumes" -v /opt/volume/a:/opt/a -v /opt/volume/b:/opt/b centos /bin/bashctrl p q使用数据卷容器docker run -d -p 8085:80 --volumes-from nginx_volumes --name "n8085" nginxdocker run -d -p 8086:80 --volumes-from nginx_volumes --name "n8086" nginx
作用:集中管理集群中,大批量的容器都需要挂载相同的多个数据卷时,可以采用数据卷容器进行统一管理
制作容器能访问的本地yum源
192.168.85.22 即虚拟机处执行以下步骤
注:关闭selinux和防火墙
vim /etc/sysconfig/selinux
systemctl stop firewalld
systemctl disable firewalld
安装vsftpd软件并启动设置自启
yum -y install vsftpd
systemctl start vsftpd
systemctl enable vsftpd
上传镜像到虚拟机 /mnt
配置yum仓库
mkdir -p /var/ftp/centos7.7
mount -t iso9660 -o loop /mnt/CentOS-7-x86_64-DVD-1908.iso /var/ftp/centos7.7/
加入开机自启
vim /etc/rc.local
mount -t iso9660 -o loop /mnt/CentOS-7-x86_64-DVD-1908.iso /var/ftp/centos7.7/
sh /etc/rc.local
172.17.0.1 即docker容器处执行以下步骤
cd /etc/yum.repos.d/
移动不要的文件
mv * /tmp
编辑新文件
vi ftp_7.repo
[ftp]
name=ftpbase
baseurl=ftp://172.17.0.1/centos7.7
enabled=1
gpgcheck=0
清理并做个缓存 yum clean all && yum makecache
注:docker centosBug Failed to get D-Bus connection: Operation not permitted
原因:在centos7的docker容器里面不能用service启动服务。
报这个错的原因是dbus-daemon没能启动。systemctl并不是不能使用。将CMD或者entrypoint设置为/usr/sbin/init即可。docker容器会自动将dbus等服务启动起来。
docker run -it --privileged --name centos7.7 08d05d1d5859 /usr/sbin/init
关闭xshell连接 重新建立对话
docker container exec -it centos7.7 /bin/bash
9.镜像制作
安装openssh
yum install openssh-server –y
systemctl start sshd systemctl enable sshd
为容器设置root密码 passwd
在宿主机查看docker container top centos7.7
基于上面的本地yum源和sshd制作镜像
docker commit centos7.7 xf/centos7.7_sshd
步骤整理
1. 启动基础镜像容器 eg:centos7
2. 优化Yum源和安装所需要的软件包并启动测试
3. 镜像制作 docker commit
4. 基于新镜像启动容器实现,xxxx系统+xxx软件服务的功能
第四步eg: docker container run -d --name=sshd_2222 -p 2222:22 08d05d1d5859 /usr/sbin/sshd -D 注:绿色处为设置启动容器即开启sshd服务
注:centos6在/etc/init.d/有初始化脚本,centos7没有可以采用以下或上面的方式
mkdir /var/run/sshd
echo 'UseDNS no' >> /etc/ssh/sshd_config
sed -i -e 'pam_loginuid.so/d' /etc/pam.d/sshd
echo 'root:123456' | chpasswd
/usr/bin/ssh-keygen –A
10.通过Dockerfile定制企业镜像
dockerfile命令补充
https://www.cnblogs.com/yanh0606/p/11360936.html
10.1 dockerfile的基本使用初体验(centos7_sshd)
mkdir -p /opt/dockerfile
cd /opt/dockerfile
mkdir centos7_sshd
vim dockerfile 添加以下文件
# 设置基本的镜像,后续命令都以这个镜像为基础
FROM centos:centos7
# 作者信息
MAINTAINER XF
# RUN命令会在上面指定的镜像里执行任何命令
RUN yum install passwd openssl openssh-server -y
RUN echo '123456' | passwd --stdin root
RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
RUN ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
# 暴露ssh端口22
EXPOSE 22
# 设定运行镜像时的默认命令:输出ip,并以daemon方式启动sshd
CMD ip addr ls eth0 | awk '{print $2}' | egrep -o '([0-9]+\.){3}[0-9]+';/usr/sbin/sshd –D
构建镜像docker image build -t "centos7-sshdv1.0" .
查看构建镜像 docker images ls
运行容器docker run -d --name "xf_centos7_sshd_v1.0" -p 2201:22 centos7-sshdv1.0
查看容器 docker container ls
终端登录验证ssh root@X.X.X.X -p 2201
11.Docker构建私有registry
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry
修改配置文件 vim /etc/docker/daemon.json 加入以下内容 注意逗号
,
"insecure-registries": ["192.168.85.22:5000"]
重启 systemctl restart docker
打标签 docker tag nginx:latest 192.168.85.22:5000/xf/nginx:v1
docker image ls
上传 docker push 192.168.85.22:5000/xf/nginx:v1
测试 打开测试服务器→修改配置文件→pull镜像
docker pull 192.168.85.22:5000/xf/nginx:v1
docker image ls
12.本地仓库加安全认证
12.1在构建私有仓库的服务器生成密码
yum install httpd-tools -y
mkdir -p /opt/registry-auth/
htpasswd -Bbn xf zy2014810 > /opt/registry-auth/htpasswd
12.2重新启动带有密钥功能的registry容器
docker rm -f `docker ps -aq` #删除之前的容器
docker run -d -p 5000:5000 -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry
12.3push镜像,需要进行login
docker tag centos:6.9 192.168.85.22:5000/xf/centos:v1
docker image ls
docker push 192.168.85.22:5000/xf/centos:v1 #发现没有权限
docker login 192.168.85.22:5000 #输入用户名和密码
docker push 192.168.85.22:5000/xf/centos:v1 #再次push
测试 打开测试服务器→修改配置文件→pull镜像
docker pull 192.168.85.22:5000/xf/centos:v1
13 habor实现图形化register
13.1安装docker和docker-compose
yum install -y docker-compose
测试 docker-compose –version
https://github.com/goharbor/harbor/releases/download/v1.10.2/harbor-offline-installer-v1.10.2.tgz
13.2下载并上传至/opt再解压缩
tar -xzf harbor-offline-installer-v1.10.2.tgz
13.3进入解压缩后的文件夹修改vim harbor.yml配置文件
注:如有报错注释掉和https有关的,有些博客配置密钥证书(暂不知是否和其有关系)
13.4执行install.sh
./install.sh
输入IP即可访问
账号:admin 密码:zy2014810
13.5修改节点的docker配置文件vim /etc/docker/daemon.json再重启守护进程和docker,使用192.168.85.22即可访问harbor仓库,默认80端口。
{
"registry-mirrors": ["https://hqd19v6d.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.85.22:5000","192.168.85.22"],
"live-restore": true
}
systemctl daemon-reload
systemctl restart docker
13.6新建项目
13.7测试制作镜像并上传
docker tag centos:6.9 192.168.85.22/xf/centos:v1
docker login 192.168.85.22 #此处的账号是harbor的 即 admin zy2014810
docker push 192.168.85.22/xf/centos:v1
13.8 再次查看
13.9harbor启动停止 cd /opt/harbor
#启动docker-compose start
#停止docker-compose stop #重启docker-compose restart
14.其他节点如果想使用(即从私人仓库pull镜像),修改节点的docker配置文件vim /etc/docker/daemon.json再重启守护进程和docker即可
{
"registry-mirrors": ["https://hqd19v6d.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.85.22:5000","192.168.85.22"],
"live-restore": true
}
systemctl daemon-reload
systemctl restart docker #节点之前也要注意hosts解析
14.1从节点Pull habor中的镜像
docker push 192.168.85.22/xf/centos:v1
15.Docker本地网络类型
docker network ls
none : 无网络模式
bridge : 默认模式,相当于NAT
host : 公用宿主机Network NameSapce
container:与其他容器公用Network Namespace
16.Docker跨主机网络介绍
macvlan
overlay
16.1Docker跨主机访问-macvlan实现
docker network create --driver macvlan --subnet=192.168.85.0/24 --gateway=192.168.85.2 -o parent=eth0 macvlan_1
ip link set eth0 promsic on (ubuntu或其他版本需要)
docker run -it --network macvlan_1 --ip=192.168.85.88 centos6.9 /bin/bash
docker run -it --network macvlan_1 --ip=192.168.85.99 centos:6.9 /bin/bash
17. Docker 跨主机访问-overlay实现
17.1启动 consul 服务,实现网络的统一配置管理
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
分别在各台主机加入配置文件 vim /etc/docker/daemon.json
{
"hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
"cluster-store": "consul://192.168.85.22:8500",
"cluster-advertise": "192.168.85.22:2376"
}
转载请标明出处【docker容器学习笔记】。
《www.micoder.cc》
虚拟化云计算,系统运维,安全技术服务.
Tags: | [阅读全文...] |
最新评论