安装docker
1.注意安装ce
yum install -y yum-utils device-mapper-persistent-data vm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io
systemctl enable docker
systemctl start docker
2.编辑daemon.json,添加镜像地址
vi /etc/docker/daemon.json
添加以下代码:
{"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}
systemctl daemon-reload
systemctl restart docker
3.启动与停止docker
开启:systemctl start docker
状态:systemctl status docker
停止:systemctl stop docker
重启:systemctl restart docker
开机启动:systemctl enable docker
查看概要:docker --help
4.镜像相关命令
查看镜像:docker images
搜索镜像:docker search centos
拉取镜像:docker pull centos:7
删除镜像:docker rmi 镜像ID
删除所有镜像:docker rmi `docker images -q`
5.容器相关命令
查看正在运行的容器:docker ps
查看所有容器:docker ps -a
查看最后一次运行的容器:docker ps -l
查看停止的容器:docker ps -f status=exited
创建容器:docker run
(1)交互式方式创建容器:
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
docker run -it --name=mycentos centos:7 /bin/bash 之后会进入容器内
退出当前容器:exit,当退出,容器自动停止
(2)守护式方式创建容器:
docker run -di --name=容器名称 镜像名称:标签
docker run -di --name=mycentos2 centos:7 之后不会进入容器内
进入方式:docker exec -it mycentos2 /bin/bash
退出当前容器:exit,当退出,容器还在运行
停止与启动容器:docker stop/start
(1)停止:docker stop 容器名称(或者容器ID)
docker stop centos2
(2)启动:docker start 容器名称(或者容器ID)
docker start centos2
文件拷贝:
(1)文件拷贝到容器:docker cp 需要拷贝的文件或目录 容器名称:容器目录
docker cp daemon.json mycentos2:/usr/local
(2)文件从容器拷贝出来:docker cp 容器名称:容器目录 需要拷贝的文件或目录
docker cp mycentos2:/usr/local/daemon.json daemon.json
目录挂载:
创建容器 添加-v参数 后面为 宿主机目录:容器目录,例如:
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
查看容器的ip地址:
docker inspect 容器名称(容器id)
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器id)
删除容器:
docker rm 容器名称(容器id)
6.应用部署
6.1 mysql部署
(1)拉取mysql镜像
docker pull centos/mysql-57-centos7
(2)创建容器
docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 mysql:5.7 --lower_case_table_names=1
(3)进入mysql容器
docker exec -it tensquare_mysql /bin/bash
(4)登录mysql
mysql -u root -p
(5)远程登录mysql:连接宿主机ip,指定端口为33306
mysql-8.0.x连接报错问题:https://www.cnblogs.com/zhurong/p/9898675.html
6.2 tomcat部署
(1)拉取tomcat镜像
docker pull tomcat:7-jre7
(2)创建容器
docker run -di --name=mytomcat -p 80:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat
(3)发布应用
cd /usr/local/webapps
6.3 Nginx部署
(1)拉取
docker pull nginx
(2)创建容器
docker run -di --name=mynginx -p 80:80 nginx
(3)发布应用
docker exec -it mynginx /bin/bash
cd /etc/engix
cat nginx.conf
/etc/nginx/conf.d#
docker cp myhtml mynginx:/usr/share/nginx/
6.4 Redis部署
(1)拉取
docker pull redis
(2)创建容器
docker run -di --name=redis -p 6379:6379 redis
7.迁移与备份
(1)容器保存为镜像:
docker commmit mynginx mynginx_i
(2)镜像备份
docker save -o mynginx.tar mynginx_i
(3)镜像回复与迁移
docker load -i mynginx.tar
执行后再次查看镜像,可以看到镜像已经恢复
8.Dockerfile
8.1 Dockerfile 常用命令:
1)FROM : FROM 镜像指令指明了当前镜像继承的基镜像,编译当前镜像时会自动下载基镜像 ,如果不指定映像url 则从docker hub 上获取。 e.g : FROM ubuntu
2)MAINTAINER :MAINTAINER 指令 指定了当前镜像的作者及联系方式。e.g : MAINTAINER: caiqiufang
3)RUN : RUN 指令可以在当前镜像上执行Linux 命令并形成一个新的层,RUN 是编译时(build) 的动作,在docker 命令中运行的shell 命令,等价于docker run 示例可以是如下两种,CMD 和 ENTRYPOINT也是如此 e.g : RUN /bin/bash -c "echo helloworld" or RUN {"/bin/bash", "-c" ,"echo helloworld"}
4)CMD : CMD 指令指明了启动镜像容器时的默认行为(docker 容器运行时的默认命令),一个Dockerfile 里只有一个CMD 指令,CMD 指令里设定的命令可以在运行镜像时使用参数覆盖,CMD 是 运行时(run)的动作。 e.g : CMD echo "this is a test" 正如上所说可以被运行时的参数覆盖,如下: docker run -d imag_name echo "this is not a test"。
5)EXPOSE : 指明了镜像运行时的容器必须监听的端口 e.g : EXPOSE 8080
6) ENV : 用来设置环境变量 e.g : ENV myname = caiqiufang or ENV myname caiqiufang。
7)ADD : ADD 指令是指从当前工作目录复制文件到镜像目录中去。 e.g : ADD test.txt /mydir/
8) ENTRYPOINT : ENTRYPOINT 指令可以让容器像一个可执行程序一样运行,这样镜像运行时可以像软件一样 接收参数执行。ENTRYPOINT 是运行(run)时的动作 e.g : ENTRYPOINT {"/bin/echo"} ,那么我们可以向镜像传递参数运行 docker run -d image_name "this is a test"
9) WORKDIR : 指定RUN, CMD, ENTRYPOINT 等命令运行的工作路径
8.2 使用脚本创建镜像
sudo docker pull centos:centos7
sudo cd /usr/local/src
sudo tar zxf jdk-8u201-linux-x64.tar.gz
sudo ls
jdk1.8.0_201 jdk-8u201-linux-x64.tar.gz
sudo mkdir /usr/local/jdk
sudo cd /usr/local/jdk
sudo cp ../src/jdk-8u201-linux-x64.tar.gz ./
sudo ls
jdk-8u201-linux-x64.tar.gz
sudo vi Dockerfile
FROM centos:centos7
MAINTAINER tom
RUN mkdir /usr/local/jdk
WORKDIR /usr/local/jdk
ADD jdk-8u201-linux-x64.tar.gz /usr/local/jdk
ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_201
ENV JRE_HOME /usr/local/jdk/jdk1.8.0_201/jre
ENV PATH $JAVA_HOME/bin:$PATH
sudo docker build -t jdk1.8 .
8.3 Docker私有仓库
https://www.cnblogs.com/naixin007/p/10952813.html
(1)拉取私有仓库镜像
docker pull registry
(2)启动私有仓库
docker run -di --name=registry -p 5000:5000 registry
(3)打开浏览器输入:http://192.168.133.10:5000/v2/_catalog看到{"repositories":[]}表示私有仓库搭建成功,并且为空
(4)修改daemon.json
vi /etc/docker/daemon.json
添加以下内容,保存退出,此步用于让docker信任私有仓库
{"insecure-registries":["192.168.133.10:5000"]}
(5)重启docker服务
systemctl restart docker
8.4 Docker私有仓库镜像上传
(1)给镜像打标签
docker tag jdk1.8 192.168.133.10:5000/jdk1.8
(2)上传镜像
docker push jdk1.8 192.168.133.10:5000/jdk1.8