1、虚拟化容器技术——Docker的安装及常用命令
官网地址:链接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
yum update 或者 yum -y update
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
yum install docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
docker -v
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://k7da99jp.mirror.aliiyuncs.com"] } EOF
sudo systemctl daemon-reload sudo systemctl restart docker
|
补充说明:
2、docker 相关命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| docker version
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker
systemctl enable docker systemctl unenable docker
docker info
docker --help
docker run -d image-name
docker start container_id or container_name
docker stop container_id or or container_name
docker image ls docker container ls -a
docker ps -a
docker ps -l
docker system df
docker stats
docker logs -f myredis docker logs -f 容器id
|
2-1、虚悬镜像
在镜像列表中,可以看到一个特殊的镜像,这个镜像既没有仓库名,也没有标签,均为 <none>
1
| <none> <none> 00285df0df87 5 days ago 342 MB
|
这个镜像原本是有镜像名和标签的,原来为 mongo:3.2
,随着官方镜像维护,发布了新版本后,重新 docker pull mongo:3.2
时,mongo:3.2
这个镜像名被转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取消,从而成为了 <none>
。除了 docker pull
可能导致这种情况,docker build
也同样可以导致这种现象。由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 <none>
的镜像。这类无标签镜像也被称为 虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:
1 2 3 4 5
| docker image ls -f dangling=true
REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 00285df0df87 5 days ago
|
一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。
2-2、用 docker image ls 命令来配合
像其它可以承接多个实体的命令一样,可以使用 docker image ls -q
来配合使用 docker image rm
,这样可以成批的删除希望删除的镜像。我们在“镜像列表”章节介绍过很多过滤镜像列表的方式都可以拿过来使用。
比如,我们需要删除所有仓库名为 redis
的镜像:
1
| docker image rm $(docker image ls -q redis)
|
或者删除所有在 mongo:3.2
之前的镜像:
docker image rm $(docker image ls -q -f before=mongo:3.2)
3、docker 操作容器
启动容器
所需要的命令主要为 docker run
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| docker pull nginx
docker run --help
docker run --name mynginx -p 80:80 -d nginx
docker update --restart=always
docker exec -it mynginx bash
apt-get update apt-get install -y vim
|
删除容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| docker rmi image-id or image-name
docker rmi $(docker images -q)
docker rmi -r $(docker images -q)
docker rmi $(docker images -q -f dangling=true)
docker rm $(docker ps -a -q)
docker rm -f 镜像名|id
docker volume ls
docker volume rm [volume_name]
docker volume rm $(docker volume ls -qf dangling=true)
docker container rm 容器id|镜像名字 或者 docker rm 容器id|镜像名字
docker container prune
|
4、Docker 提交、修改内容、传输
1、修改容器内部内容
1 2 3 4 5 6 7 8
| docker run --name=mynginx -p 80:80 -d nginx
docker exec -it mynginx /bin/bash
cd /usr/share/nginx/html
echo "<h1>Welcom come ningx</h1>" > index.html
|
2、提交容器内容
1 2 3 4 5
| docker commit -a "ss" -m "首页内容变化" mynginx mynginx:v1.0
docker save -o mynginx.tar mynginx:v1.0
|
3、镜像传输
1 2 3 4 5 6 7 8
| scp mynginx.tar root@101.133.170.222:/data/nginx
docker load -i mynginx.tar
docker run --name mynginx -p 80:80 -d mynginx:v1.0
|
4、镜像挂在
1 2 3 4 5 6 7 8 9 10 11
| docker cp eaeda5ac249d:/etc/nginx/nginx.conf /data/nginx/conf/
docker cp /data/nginx/conf/nginx.conf eaeda5ac249d:/etc/nginx/
docker run -p 80:80 \ -v /data/nginx/html:/usr/share/nginx/html:ro \ -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ --name mynginx \ -d nginx
|
5、redis 安装测试
docker官方文档安装方式:https://hub.docker.com/_/redis
1 2 3 4 5 6 7 8
| docker run --name myredis -v /date/redis/conf/redis.conf:/etc/redis/redis.conf \ -v /data/redis/data:/data -p 6379:6379 -d redis:latest --requirepass "123456" --appendonly yes
docker run --name myredis \ -v /data/redis/conf/redis.conf:/etc/redis/redis.conf \ -v /data/redis/data:/data -p 6379:6379 -d redis:latest redis-server /etc/redis/redis.conf
|
6、定制镜像 Dockerfile
把打好的 jar 包上传到服务器上
编辑 DockerFile 复制一下内容
1 2 3 4 5 6 7 8 9 10
| FROM openjdk:8
ADD java-demo-0.0.1-SNAPSHOT.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar","/app.jar"]
MAINTAINER ss
|
构建镜像:docker build -t my-demo:v1.0 -f DockerFile .
启动构建完的镜像:docker run --name mydemo -p 8001:8080 -d my-demo:v1.0
访问:http://ip:8001/hello
7、卸载 docker 和相关依赖
1 2 3 4 5
| yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker rm -rf /var/lib/containerd
|
5、docker 图形化工具 portainer
Github 地址:https://github.com/portainer/portainer
直接使用 docker 来安装 portainer 是非常方便的,仅需要两步即可完成。
5-1、首先下载 portainer 的 docker 镜像
1
| docker pull portainer/portainer
|
5-1、再使用如下命令运行 portainer 容器
官网部署文档:https://documentation.portainer.io/v2.0/deploy/ceinstalldocker/
1 2 3 4 5
| docker run -p 9000:9000 -p 8000:8000 --name portainer \ --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /mydata/portainer/data:/data \ -d portainer/portainer:latest
|
第一次登录的时候需要创建管理员账号,访问地址:http://ip:9000/
错误问题
出现以下错误 -bash: /usr/bin/yum: No such file or directory
更换yum源
到 http://mirrors.kernel.org/centos/
或者 http://mirrors.163.com/centos/
找对应系统版本号和系统位数下载,找到 yum、yum-plugin-fastestmirror、yum-metadata-parser、python-urlgrabber
这四个软件包下载
下载命令 直接用 wget 下载 rpm 包,然后执行下面三条命令
1 2 3
| rpm -ivh --nodeps yum-plugin-fastestmirror-1.1.31-45.el7.noarch.rpm rpm -ivh --nodeps yum-metadata-parser-1.1.4-10.el7.x86_64.rpm rpm -ivh --nodeps yum-3.4.3-158.el7.centos.noarch.rpm
|
安装 nginx 出现以下问题,说明挂载的文件夹不存在,需要先把文件创建好
1 2 3
| [root@aliyun data] 8fe34ac4b3793b486ccf37ce9d86210a803e1de90df4727e440d9740983e8409 /usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:290: starting container process caused "container init exited prematurely".
|