Docker入门指令大全
docker的安装:
- 移除旧的版本:
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
- 安装一些必要的系统工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加软件源信息:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新 yum 缓存:
sudo yum makecache fast
- 安装 Docker-ce:
sudo yum -y install docker-ce
- 启动 Docker 后台服务
sudo systemctl start docker
- 测试运行 hello-world
[root@runoob ~]# docker run hello-world
- 修改hub进行加速:
文件是这个/etc/docker/daemon.json
- 直接进去修改
{ "registry-mirrors" :["https://docker.mirrors.ustc.edu.cn"]}
以下都可以替换上面的网址,个人比较喜欢科大的
教程文章链接:
https://www.cnblogs.com/ming369/p/10711771.html
hello world:
- docker run ubuntu:15.10 /bin/echo "Hello world" 运行ubuntu:15.10镜像 并执行命令 xxxx。 如果本地没有此镜像会去Docker Hub上pull。
- docker run -i -t ubuntu:15.10 /bin/bash 运行一个交互式的镜像容器
- docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" 后台运行一个容器,会返回容器ID
- docker ps 可以查看所有运行的镜像
- docker logs dockerId/dockerName 可以根据某个dockerId查看运行日志
- docker stop dockerId/dockerName 停止一个容器
镜像的使用:
- 1.列出本地所有镜像:docker image ls
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
使用 REPOSITORY:TAG 来定义不同的镜像:
runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash
- 2.拉取一个镜像
docker pull ubuntu:13.10
- 3.搜索一个镜像:
docker search httpd
- 4.创建镜像
当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
A.从已经创建的容器中更新镜像,并且提交这个镜像
B.使用 Dockerfile 指令来创建一个新的镜像
A:更新镜像
docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件
更新镜像之前,我们需要使用镜像来创建一个容器。
docker run -t -i ubuntu:15.10 /bin/bash
在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit命令来退出这个容器。
我们可以通过命令 docker commit来提交容器副本:
docker commit \
--author "Tao Wang <twang2218@gmail.com>" \
--message "修改了默认网页" \
webserver \
nginx:v2
B:构建镜像
更新镜像之前,我们需要使用镜像来创建一个容器。
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
docker build -t runoob/centos:6.7 .
docker history nginx:v2
- 5.docker tag 860c279d2fec runoob/centos:dev
docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。
容器的使用:
docker
docker ps --help
docker ps -a
docker pull nginx
- 端口映射
# 全端口映射
docker run -d -P nginx
-d:让容器在后台运行。
-P:将容器内部使用的网络端口映射到我们使用的主机上。
# 自定义某个端口的映射
docker run -d -p 5000:5000 training/webapp python app.py
查看容器的端口映射:
docker port bf08b7f2cd89
docker port wizardly_chandrasekhar
- 查看容器内日志
docker logs -f bf08b7f2cd89
- 查看容器内进程:
docker top wizardly_chandrasekhar
- 查看容器底层信息
docker inspect wizardly_chandrasekhar
- 停止容器
docker stop wizardly_chandrasekhar
- 重启容器:
docker start wizardly_chandrasekhar
- 移除容器
docker rm wizardly_chandrasekhar
- 登录运行中的容器
docker attach 753 连接到container启动时的终端 断开时会同时关闭container
docker exec -it 753 /bin/bash 启动新的终端 断开时不影响container
- 启动容器直接运行某个指令
docker run 84c287 java -jar /videobdjob.jar solrIndex
-c其实相当于比例 并不是真正的1024
docker run -m 1024M -c 1024 84c287 java -jar /videobdjob.jar solrIndex
- 还可以限制io速度
docker run -it --device-write-bps /dev/sda:30MB ubuntu
bps 是 byte per second,每秒读写的数据量。
iops 是 io per second,每秒 IO 的次数。
可通过以下参数控制容器的 bps 和 iops:
--device-read-bps,限制读某个设备的 bps。
--device-write-bps,限制写某个设备的 bps。
--device-read-iops,限制读某个设备的 iops。
--device-write-iops,限制写某个设备的 iops。
容器网络
(查看网桥brctl show ip addr 查看网络 docker network ls)
container默认bridge模式 172.17.0.0/24的网桥
docker run -d -p 9031:9031 17d等于docker run -d -p 9031:9031 --net=bridge 17d
可以看到网络信息跟宿主机一致 包括hostname
docker run -dit --net=host 17d
重用另一个容器的网络命名空间
docker run -dit --net=container:70164 5dc
相当于一台虚拟机没插网卡
docker run -dit --net=none 5dc48
指定子网和网关:
docker network create -d bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 mynet
容器文件
- 主目录 /var/lib/docker image和container都会在此目录下 注意磁盘空间分配
- builder buildkit containers devicemapper image network plugins runtimes swarm tmp trust volumes
docker-nginx的安装使用:
- 入门:
docker search nginx
docker pull nginx
docker images | grep nginx
docker run -i -t --name nginx-test -p 8081:80 -d nginx
curl http://localhost:8081
- 实战:
创建本地目录,cp或create文件并挂载到容器中
$ mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf
docker cp 6dd4380ba708:/etc/nginx/nginx.conf ~/nginx/conf
vim ~/nginx/www/index.html
docker run
-d
-p 8082:80
--name runoob-nginx-test-web
-v ~/nginx/www:/usr/share/nginx/html
-v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v ~/nginx/logs:/var/log/nginx nginx
curl http://localhost:8082/index.html
- 如果要重新载入 NGINX 可以使用以下命令发送 HUP 信号到容器:
$ docker kill -s HUP container-name
- 重启 NGINX 容器命令:
$ docker restart container-name
docker-mysql的安装使用:
docker pull mysql
docker -idt --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
docker exec -it mysql-test /bin/bash
mysql -u root -p
- 1.授权
GRANT ALL ON *.* TO 'root'@'%';
此时,还不能远程访问,因为Navicat只支持旧版本的加密,需要更改mysql的加密规则
- 2.更改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
- 3.更新root用户密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
- 4.刷新权限
flush privileges;
本地创建私有镜像仓库
- 1.下载仓库镜像 registry
- 2.启动registry容器
- 3.新增配置文件daemon.json文件 路径:/etc/daemon.json 内容:{"insecure-registries":["100.2.96.181:5000"]}
- 4.在私有仓库上上传下载镜像,需要在镜像名称前增加ip和port
e.g docker pull 192.168.0.130:5000/centos:v1