Docker
安装
卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装一些依赖包
sudo yum install -y yum-utils
添加 stable 版本的 docker 仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
建议使用阿里云的镜像进行加速,要不太慢了
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
列出docker的可安装版本
yum list docker-ce --showduplicates | sort -r
安装docker
sudo yum install docker-ce-20.10.9 docker-ce-cli-20.10.9 containerd.io -y
设置为开机启动
sudo systemctl enable docker
sudo systemctl daemon-reload
仓库地址
sudo vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
启动 docker
systemctl start docker
启动后查看docker相关信息
sudo docker info
*** 运行容器时出现报错
docker: Error response from daemon: cannot start a stopped process: unknown.
可以执行下面命令后, 再重新运行容器
sudo yum install -y libseccomp-devel
基本操作
列出指定镜像的可用版本
-------dockertags.sh---------------
#!/bin/bash
function usage() {
cat << HELP
dockertags -- list all tags for a Docker image on a remote registry.
EXAMPLE:
- list all tags for ubuntu:
dockertags ubuntu
- list all php tags containing apache:
dockertags php apache
HELP
}
if [ $# -lt 1 ]; then
usage
exit
fi
image="$1"
tags=`wget -q https://registry.hub.docker.com/v1/repositories/${image}/tags -O - | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}'`
if [ -n "$2" ]; then
tags=` echo "${tags}" | grep "$2" `
fi
echo "${tags}"
然后执行命令
./dockertags.sh ubuntu
镜像操作
拉取
docker pull ubuntu:18.04
docker images
删除
docker rmi -f ubuntu:18.04
给镜像重新打上一个 tag
docker tag ubuntu:18.04 zcw/ubuntu:18.05
docker images
将镜像导出成一个独立的文件
docker save ubuntu >./ubuntu.tar.gz
从文件导入
docker rmi -f ubuntu:18.04
docker images
docker load <./ubuntu.tar.gz
docker images
运行容器
进程结束时立即删除容器
docker run -it --rm ubuntu:18.04 /bin/bash
/bin/bash命令会在容器中常驻前台,所以容器会一直运行 如果执行一个不会常驻前台的命令 例如ls, 执行后容器会立刻结束运行 所以运行nginx不要用daemon模式, 因为nginx执行后就退出到后台, 容器会立刻结束运行
前台运行容器循环打印
docker run --rm ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
后台运行容器并用日志查看打印
docker run -d --rm ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
docker logs -f 35c4727a2e66
docker stop 35c4727a2e66
因为用–rm, 退出容器随即将会被删除
网络
查看容器中的网络
启动一个容器
docker run -tid --net=bridge --name docker_bri busybox top
登入容器
在这里插入代码片
查看容器内的ip地址
ifconfig -a
在容器内查看网关
route -n
在启动一个容器与docker_bri容器连接
docker run -tid --link docker_bri --name docker_bri1 busybox top
登入容器
docker exec -it docker_bri1 /bin/sh
尝试连接
ping docker_bri
但–link是单方向的, 所以反过来就不行
创建自定义网桥网络实现互联互通
创建一个自定义网络
docker network create -d bridge my-net
查看自定义网络
docker network ls
启动容器并连入my-net网络
docker run -it --rm --name busybox1 --network my-net busybox sh
打开另外一个命令行窗口
docker run -it --rm --name busybox2 --network my-net busybox sh
然后在两个容器中分别取ping另一个容器, 发现两个容器是可以连通的
ping busybox1
ping busybox2
|