docker基础笔记

安装docker
#卸载原docker
yum remove docker docker-common container-selinux docker-selinux docker-engine -y
#首先剩余未卸载的
rpm -qa|grep docker
docker-ce-cli-20.10.5-3.el7.x86_64
#执行卸载
yum -y remove docker-ce-cli-20.10.5-3.el7.x86_64
#安装前置条件
yum install -y yum-utils   device-mapper-persistent-data   lvm2
#添加docker源方法一
yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo
#添加docker源方法二
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装docker的ce版本
yum -y install docker-ce
#或者安装指定版本docker
yum install -y docker-ce-19.03.12 docker-ce-cli-19.03.12 containerd.io
#添加配置取镜像源
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
#启动docker
systemctl start docker
#设置开机自启
systemctl enable docker
#查看docker版本
docker version
镜像相关命令

拉取镜像慢参考链接:https://blog.csdn.net/winter2121/article/details/107399812

yum -y install docker  #安装docker 
systemctl enable docker   #设置开机自启
systemctl start docker    #启动docker服务 
docker search centos     #搜索docker hub 上的centos镜像

docker pull centos:7.5.1804      #拉取指定版本镜像
docker pull nginx   #拉取最新镜像

docker image ls   #查看所有镜像
docker images centos:7.6.1810   #查看指定镜像
docker image inspect 镜像ID   #查看镜像详细信息(后面加 IMAGE ID 信息)

docker image ls -q   #只显示镜像ID
docker image ls --no-trunc  #显示完整的镜像ID信息(sha256:64位号码,默认只截取12位)

docker image rm 镜像ID   #删除镜像 
docker image rm -f 镜像ID  #加 -f 为强制删除 
docker image rm -f  $(docker image ls -q)   #删除所有镜像

docker image save centos > /opt/centos.tar.gz     #镜像导入
docker image load -i /opt/centos.tar.gz     #镜像导出
docker tag [镜像id] [新镜像名称]:[新镜像标签]      #重命名镜像

容器相关命令

docker run -it 镜像ID   #交互式启动容器并进入
docker run -it --name='设置镜像唯一名称' 镜像ID  #交互式启动容器指定名称并进入
docker run -it --restart=always  --name='设置镜像唯一名称' 镜像ID  #重启docker后自动拉起容器
docker run -it --name='设置镜像唯一名称' --rm 镜像ID   #退出自动删除容器
docker run -itd --name c1 300e315adb2f   #没有服务的容器需要加 -it
docker run -d --name n2 -h web_host -e test=123 -p 30:80 nginx  #-h设置容器主机名 -e设置变量
#内容限制
#允许容器最多使用500m内存和100m的Swap --oom-kill-disable意思是资源不够用,不会去杀掉这个容器
docker run -d --name n3 --memory='500m' --memory-swap='100m' --oom-kill-disable nginx
#CPU限制 
docker run -d --name n4 --cpus='1.5' nginx   #允许容器使用一个半的cpu
docker run -d --name n5 --cpus='.5' nginx   #允许容器使用半个cpu
docker stats --no-stream n3   #查看容器cpu内存使用率

docker ps   #查看容器运行(只显示运行的)
docker ps -a    #查看容器显示所有的

docker rm 容器ID  #手动删除容器 如果要强制删除 rm -rf
docker rm $(docker ps -q -f status=exited)  #删除已退出的容器
docker rm -f $(docker ps -aq)  	 #删除所有的容器

docker run -d --name='zhang_ngix' nginx:1.14   #守护式容器启动命令
docker run -d -p 28:80 --name='nginx_80' nginx   #把宿主机的28端口映射给nginx容器80端口)
docker run -d -p 192.168.1.208:29:80 --name='nginx_80' nginx   #指定宿主机IP和端口映射给nginx容器80端口)
docker stop 容器ID  #停止容器
docker start 容器ID  #启动容器

docker attach 容器ID  #进入已启动的容器
docker exec -it 容器ID bash  #子进程方式登录(退出不会影响当前容器)

ctrl+P+Q   #容器后台运行
docker ps -a -q   #只显示容器ID
docker top 容器ID     #显示容器进程ID等信息
docker inspect 容器ID    #查看容器IP地址

docker logs 容器ID   #查看日志
docker logs -f 容器ID   #实时查看
docker logs -tf 容器ID   #详细实时查看

Ctrl+D或者 exit   #退出交互模式
容器服务重启后自启

方法1:配置后所有容器都生效
docker server配置文件 /etc/docker/daemon.json 添加

{
'''''''',
"live-restore":true
}

注意:第一行后面加逗号
在这里插入图片描述
方法2:添加运行容器的时候添加 --restart=always ,对单台起作用

docker run -it --restart=always  --name='设置镜像唯一名称' 镜像ID 

宿主机和容器之间数据共享(挂载目录)

docker cp index.html  n1:/usr/share/nginx/html/    #手动拷贝宿主机里面文件到容器
docker cp n1:/usr/share/nginx/html/50x.html ./	   #手动拷贝容器里面文件到宿主机

#Volume实现宿主机和容器数据共享 -v 宿主机目录路径:容器目录路径
docker run -d -p 8080:80 --name='n1' -v /opt/html:/usr/share/nginx/html  nginx

#数据卷容器(先把需要挂载的目录共享给A容器,在由其他的容器来挂载这台A容器,实现多台容器快速挂载相同目录)
#多个目录挂载到A容器
docker run -d --name 'A_docker' -v /opt/Volume/a:/opt/a -v/opt/Volume/b:/opt/b nginx
#把A容器挂载到其他容器
docker run -d -p 8081:80 --volumes-from A_docker --name 'n8081' nginx
docker run -d -p 8082:80 --volumes-from A_docker --name 'n8082' nginx

制作镜像

#docker commit 改动的容器名 新的镜像名:tag版本标识
docker commit c8 zhang/centos_ssh:8.3

centos7添加ssh

yum install -y openssh-server

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
#执行上面命令后,重新制作镜像
docker run -d -p 8080:22 --name='c75ssh' 6ffa3d443e20 /usr/sbin/sshd -D   #启动镜像和sshd服务

dockerfile构建可sshd远程的镜像

创建一个路径dockerfile文件夹名称固定
dockerfile文件名固定
在这里插入图片描述
dockerfile文件里面的内容

#centos7.5添加ssh远程连接
#指定镜像,不加后面版本默认最新
FROM centos:7.5.1804  
#运行脚本,RUN主要是黑屏终端可以运行的脚本
RUN yum install -y openssh-server \  
&& 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
RUN /usr/bin/ssh-keygen -A
#容器暴露端口
EXPOSE 22  
#启动容器时执行的命令可以添加在这里,注意要为双引号,启动时不用在添加
CMD ["/usr/sbin/sshd","-D"]  

在ssh目录下运行dockerfile构建镜像

#zhang/c75为新构建的镜像名称,v1为tag -t #镜像名称 -f #指定dockerfile文件位置
docker image build -t 'zhang/c75:v1' ./
dockerfire命令解释

注意:要拷贝的文件或者执行的脚本都需要放到宿主机dockerfile目录

FROM centos:7.5.1804  #指定镜像,不加后面版本默认最新
MAINTAINER zhang  #镜像维护者姓名
RUN mkdir /var/run/sshd && touch /opt/zhang.txt #后面跟运行的命令,命令之间用 && 间隔开
#COPY参数:把宿主机dockerfile目录里面文件拷贝到容器,可支持匹配,注意:拷贝目录,只拷贝目录下的子文件子目录
COPY index.html /var/www/html/   
ADD bbs.tar.gz /var/wwww/html/  #和COPY功能一样,多了自动解压 .tar.* 功能 不是压缩包,就只拷贝,可指定url下载到容器上
ENV datadir /data/mysql/data  #创建变量把路径值赋给datadir
VOLUME ["/var/www/html/","${datadir}"]  #VOLUME暂时不明确/使用上面的变量
EXPOSE 22  #暴露容器端口
CMD ["/bin/bash","/init.sh"]  #容器启动时运行的第一个脚本,脚本需放置dockerfile目录,注意:用双引号
ENTRYPOINT ["/bin/bash","/init.sh"]   #启动容器第一个进程防止被手工输入的命令替换,防止容器启动就关闭
WORKDIR   #类似于cd命令

列子:
init.sh脚本内容

在这里插入图片描述
在这里插入图片描述

docker构建私有的registry(用于内网)

1.启动registry

docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry  registry

2.修改配置文件:vim /etc/docker/daemon.json
添加一行数据[“自己宿主机的私有地址:端口”]

"insecure-registries":["192.168.0.54:5000"]

在这里插入图片描述

3.修改镜像名

#tag后面为镜像ID 镜像名规则:私有地址:端口/项目名/镜像名:版本号
docker tag 9f266d35e02c 192.168.0.54:5000/zhang/centos:7.4.1708

4.推镜像到registry

docker push 192.168.0.54:5000/zhang/centos:7.4.1708
给私有registry添加安全认证

1.生成密码

yum install httpd-tools -y
mkdir /opt/registry-auth/ -p
htpasswd -Bbn zhang 123 > /opt/registry-auth/htpasswd

2.重新启动带有秘钥的registry容器

docker run -d -p 5000:5000 -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry --restart=always --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"  -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd"  registry

3.登录验证(初次推或者拉需要登录验证)
在这里插入图片描述

网络相关
docker network ls     #查看网络类型
none  #无网络模式
bridge  #默认模式,相当于NAF
host  #共用宿主机网络 Network NameSapce
container  #与其他容器共用 Network  NameSapce

docker run -it --name 'cb3' --network=bridge 300e315adb2f  #启动指定网络模式

macvlan两台宿主机的容器之间实现内网访问(容器外网不可用,内网IP需要人为设定,容易内网冲突)

# 两台宿主机都需执行下面语句 --subnet:子网 --gateway:网关 -o:绑定到物理网卡 macvlan_1:网络名
docker network create --driver macvlan --subnet=100.0.0.0/24 --gateway=100.0.0.254 -o parent=eth0 macvlan_1
#A主机执行 设置成上面创建的网络 和 设置内网IP 
docker run -it --network=macvlan_1 --ip 100.0.0.1 --name='c83' 300e315adb2f
#B主机执行 设置成上面创建的网络 和 设置内网IP
docker run -it --network=macvlan_1 --ip 100.0.0.2 --name='c83' 300e315adb2f

跨主机访问 overlay 实现容器之间访问 也可以连接外网

#启动 consul 服务,实现网络统一配置管理(只用执行一台宿主机)
docker run -d -p 8500:8500 -h consul --name consul progrium/consul  -server -bootstrap
#vim /etc/docker/daemon.json 添加配置后需要重启docker服务(宿主机都需添加配置)
"hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
"cluster-store":"consul://192.168.0.54:8500",
"cluster-advertise":"192.168.0.54:2376"

#创建overlay网络  oll:网络名可以随意取
docker network create -d overlay --subnet 172.16.0.0/24 --gateway 172.16.0.254 ol1
#启动指定网络
docker run -it --name 'cb3' --network=ol1 300e315adb2f  #启动指定网络模式
容器运行就退出问题排查

Docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令,就是会自动退出的

设置一个启动命令才就可以避免此问题,设置启动命令(一定要设置不会自动退出的命令)
启动命令1

后面加:ping www.baidu.com

docker run -d zhang:v1 ping www.baidu.com

启动命令2
后面加: /bin/sh -c “while true;do echo hello;sleep 5;done”

docker run -d zhang:v1 /bin/sh -c "while true;do echo hello;sleep 5;done"

dockerfile文件CMD后面加这个会让容器运行不退出

CMD ["/bin/sh","-c","while true;do echo hello;sleep 5;done"]

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值