yum install -y docker
docker images
result:
# 镜像的名字+标签=唯一
[root@zos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mariadb latest eff629089685 3 days ago 408 MB
docker.io/busybox latest d3cd072556c2 11 days ago 1.24 MB
docker search img_name
docker pull img_name
docker save docker.io/mariadb:latest -o mariadb.tar
docker load -i mariadb.tar
docker run -it docker.io/centos:latest /bin/bash
解读
/bin/bash
容器里的命令,若不填写,则执行容器默认的命令,也有的容器不写命令启动不起来,比如nginx
启动nginx
docker run -it docker.io/nginx:latest /bin/bash
那么启动容器的时候到底写不写默认命令呢?
docker通过6个命名空间将容器隔离出一个空间来uts:主机名命名空间
net:网络命名空间
pid:进程命名空间
user:用户命名空间
ipc:信号向量
mount:文件系统
Docker容器中执行的命令在真机可以查看并可以杀死
docker ps
docker history docker.io/centos:latest --no-trunc=true
docker save docker.io/mariadb:latest -o mariadb.tar
docker load -i mariadb.tar
docker tag old_name:v new_name:v
docker run -it docker.io/centos:latest
docker run -itd docker.io/nginx:latest
docker ps -a
docker exec -it container_id /bin/bash # 创建一个新的终端并连接
# 连接原有的终端,若使用此方式进来了,可使用Ctrl+P Q退出终端,而不要用exit关闭终端,类似run命令中的-d参数,此命令经常用于查看原bash的输出内容
docker attach container_ids
docker rm $(dockr stop id)
docker rm $(docker ps -aq)
apt-get、dpkg
CMD ["/bin/ls","-l","-a"]
Dockerfile文件内容
FROM docker.io/centos:latest
ADD local.repo /root/local.repo
RUN yum install -y vim net-tools psmisc iproute
执行构建命令(执行当前.目录下的Dockerfile文件,构建成镜像test:latest)
docker build -t test:latest .
做一个ssh的服务1.查找命令在哪个包
yum provides sshd
2.查看安装路径
# centos
[root@33f6e23759fc /]# rpm -ql openssh-server
...
/usr/lib/systemd/system/sshd.service
...
# ubuntu
root@b476edb48d9c:/# dpkg -L nginx
3.查看sshd.server文件中的ExecStart
[root@33f6e23759fc /]# cat /usr/lib/systemd/system/sshd.service
...
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
...
4.生成一个密钥
[root@33f6e23759fc /]# ssh-keygen -A
[root@33f6e23759fc /]# sshd-keygen
5.设置密码&启动服务
[root@33f6e23759fc /]# passwd
Changing password for user root.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
[root@33f6e23759fc /]# /usr/sbin/sshd -D
写成dockerfile
FROM myos:latest # 基于myos:latest镜像
RUN yum install -y openssh-server initscripts passwd # 安装所需要的包
RUN ssh-keygen -A # 生成需要的sshd-key
RUN echo "a" |passwd --stdin root # 设置登录密码
ENV EnvironmentFile=/etc/sysconfig/sshd # 设置环境变量
EXPOSE 22 # 开放22端口
CMD ["/usr/sbin/sshd","-D"] # 启动默认执行的命令
创建一个http服务
FROM myos:latest
RUN yum install -y httpd
WORKDIR /var/www/html # cd的替代者
ENV EnvironmentFile=/etc/sysconfig/httpd
ENV PS1='[webserver@\h \W]\$ ' # 设置主机名格式
ADD index.html index.html
EXPOSE 80
EXPOSE 442
CMD ["/usr/sbin/httpd","-DFOREGROUND"]
安装私有仓库
[root@zos cc]# yum install -y docker-distribution.x86_64
启动私有仓库,并设为开机自启动
[root@zos cc]# systemctl start docker-distribution.service
[root@zos cc]# systemctl enable docker-distribution.service
仓库配置文件及数据存储路径
/ect/docker-distribution/registry/config.yml
/var/lib/registry
访问 http://ip:5000/v2/_catalog
客户端配置,修改配置文件
vi /tec/dcoker/darmon.json
{
"insecure-registries":["仓库ip:5000"]
}
重启服务
docker stop id # 停止所有容器
systemctl restart docker
修改镜像标签
docker tag docker.io/busybox:latest 仓库ip:5000/busybox:latest
上传镜像
docker push xxx.xxx.xxx.xxx:5000/busybox:latest
修改配置文件
vi /etc/docker/daemon.json
{
"insecure-registries":["仓库id:5000"]
}
systemctl restart docker
启动一个容器
# 配置完私有仓库不需要拉取镜像,直接docker run即可,且运行完容器以后该镜像会自动保存到本地
docker run -it [仓库ip:5000/]busybox:latest
网址: http://xx.xx.xx.xx:5000/v2/_catalog
只显示镜像名
网址:http://xx.xx.xx.xx:5000/v2/myos/tags/list
产看镜像具体版本列表
主机卷的 映射
docker run -itd -v /root/test:/var/www/html myos:httpd1
yum install nfs-utils
vim /etc/exports
/div *(rw)
systemctl start nfs
1.服务器创建NFS共享存储目录,权限为rw
# nfs服务器
yum install -y nfs-utils # 安装nfs服务使用的包
vi /etc/exports # 编辑nfs配置文件
/var/webroot *(rw) # 设置共享目录
mkdir /var/webroot # 创建需要共享的目录
chmod 777 /var/webroot # 设置共享目录的权限
systemctl start nfs # 开启nfs服务
systemctl restart nfs # 重启nfs服务
systemctl enable nfs # 将nfs服务设为开机自启
2.客户端挂载共享,并将共享目录映射到容器中
# docker1和docker2
yum install -y nfs-utils
showmount -e nfs服务器ip # 查看server服务器可挂载的目录
mount -t nfs nfs服务器ip:/var/webroot /mnt # 将nfs挂载到本地
3.docker1启动nginx
docker run -itd -v /mnt:/usr/share/nginx/html docker.io/nginx:latest
docker inspect nginx容器id # 查看容器底层信息,包括ip
4.docker2启动apache
docker run -itd -v /mnt:/var/www/html myos:httpd
docker inspect apache容器id # 查看容器底层信息,包括ip
5.nginx和apache共享同一web目录
echo "hello world" > /mnt/index.html
# docker1
curl 容器ip
# docker2
curl 容器ip
查看网络
docker network ls
创建一个新的虚拟机
docker network create --subnet=10.10.10.0/24 docker1
创建容器时指定使用的网络
docker run --network=bridge|host|none... ...
docker run --network=docker1 -itd docker.io/myos
docker network create --subnet=10.10.10.0/24 docker1
docker run -it --network=docker1 myos:latest
docker inspect container1_id # 10.0.0.2
docker run -itd --network=docker1 myos:latest
docker inspect container2_id # 10.0.0.3
docker exec -it container2_id /bin/bash
container2_id # ping 10.10.10.2 # 可以通
加参数 -p-p 宿主机端口:容器端口
docker run -itd -p 81:80 -v /mnt:/var/www/html myos:httpd1
docker run -itd -p 82:80 -v /mnt:/var/www/html docker.io/nginx
查找命令在哪个包
yum provides sshd
查看安装路径
[root@33f6e23759fc /]# rpm -ql openssh-server
...
/usr/lib/systemd/system/sshd.service
...
查看sshd.server文件中的ExecStart
[root@33f6e23759fc /]# cat /usr/lib/systemd/system/sshd.service
...
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
...
生成一个密钥
[root@33f6e23759fc /]# ssh-keygen -A
[root@33f6e23759fc /]# sshd-keygen
查看端口
[webserver@a4df12f8c6d7 html]# ss -ltun